2010-11-22 9 views
5

Windows.Formsアプリケーションの代理人に問題があります。 "設定" というボタンがありますwinforms間で変数を渡す

  1. メインフォーム、:

    には2つの形式があります。

  2. 「設定」フォームの場合、これは「子」フォームです。

メインフォームの[設定]ボタンをクリックすると、設定フォームのインスタンスが開きます。

私の問題は、変数を設定フォームに渡す必要があるということです。新しいフォームが可変テキストを表示するようにします。私は子供の "設定"フォームの情報を取得する方法を知らない。私はこのチュートリアルをオンラインで行ったので、チュートリアルから目的地のフォームの情報を読む方法を理解できませんでした。

ここで私は、これまでのメインフォーム内のコードをやったものだ:

あなたはパラメータを取り、あなたの設定フォームにコンストラクタを追加し、そこに必要なデータを渡していないのはなぜ
public partial class MainForm : Form 
{ 

    /// <summary> 
    /// delegate to send data between forms 
    /// </summary> 
    public delegate void PageInfoHandler(object sender, PageInfoEventArgs e); 
    /// <summary> 
    /// event of the delegate 
    /// </summary> 
    public event PageInfoHandler PageInfoRetrieved; 

    //other stuff, events blabla 

    private void toolStripBtnSettings_Click(object sender, EventArgs e) 
    { 
     PageInfoEventArgs args = new PageInfoEventArgs(SomeString); 
     this.OnPageInfoRetrieved(args); 

     SettingsForm settingsForm = new SettingsForm(); 
     settingsForm.ShowDialog(); 
    } 

    private void OnPageInfoRetrieved(PageInfoEventArgs args) 
    { 
     if (PageInfoRetrieved != null) 
      PageInfoRetrieved(this, args); 
    } 
} 

答えて

12

設定フォームのコンストラクタに必要な情報を渡し、そこから必要なもののアクセサメソッドを提供します。

public class SettingsForm : WinForm 
{ 
    private string m_Data; 
    private int m_nExample = 0; 

    // ctor 
    public SettingsForm(string _data) 
    { 
     m_Data = data; // you can now use this in SettingsForm 
    } // eo ctor 

    public int Example {get{return(m_nExample);} } 
} // eo class SettingsForm 

上記の「例」では、文字列を使用してSettingFormを構築し、それを使用できる整数で取得できます。あなたのコードでは:

private void toolStripBtnSettings_Click(object sender, EventArgs e) 
{ 
    PageInfoEventArgs args = new PageInfoEventArgs(SomeString); 
    this.OnPageInfoRetrieved(args); 

    SettingsForm settingsForm = new SettingsForm("some data to pass"); 
    settingsForm.ShowDialog(); 

    int result = settingsForm.Example; // retrieve integer that SettingsForm used 
} 
+0

ありがとう、それは完全に働いた。 –

2

4

プロパティをSettingsFormに追加することをお勧めします。

次に、このようにそれを呼び出す:

SettingsForm settingsForm = new SettingsForm(); 
settingform.myProperty = myPropertyvalue; 
settingsForm.ShowDialog(); 
5

Setttingsフォームはクラスです。それはあなたのもので、あなたはそれで好きなことをすることができます。そのため、コンストラクタにパラメータを追加します。次に、あなたのMainFormを呼び出してSettingsForm(何でも)を呼び出すと、すべて設定されます。

+1

これは私がやることです。次に、子フォームから情報を取り戻す必要がある場合は、親クラスがアクセスできるgetメソッドでプロパティを作成します。 IDKのチュートリアルはどこから入手しましたか?その方法は – Nobody

+0

ありがとうございます。これで解決しました。好奇心が強いのですが、デリゲートを使うことも可能でしょうか?私はデリゲートを使用することはこの単純な問題のためにはあまりにも多くのことだと理解していますが、それも可能であるかどうかは不思議です。 –

+1

はい、実際の値を渡すこともできますし、MainFormへの参照を渡してMainFormにプロパティを追加してSettingsFormを呼び出すこともできますし、SettingsFormの代理人を呼び出して呼び出すこともできます値を取得するメソッド。最後の1つは変だけど。デリゲートを実際に見せようとする言い訳のようだ。 –

2

あなたの設定のためのパラメータ化コンストラクタを作成することができ、テキストを受け付ける形成し、その後、フォームにプロパティに

public partial class SettingsForm : Form 
{ 

    public string DisplayText {get;set;} 

    public SettingsForm(string text) 
    { 
     DisplayText = text; 
    } 
} 

それを設定し、あなただけ初期化したいですこの(あなたのMainFormから)

var settingsForm = new SettingsForm("my init text"); 

等からの設定は、設定フォームが正しく初期化され、あなたが使用する表示テキストプロパティに必要なテキストを用意して

関連する問題