2011-01-15 14 views
3

ユーザーがform1のボタンをクリックすると、form2が表示されるアプリケーションを作成しています。ユーザーはform2でチャットを記入し、次にform2を閉じるボタンをクリックし、処理のためにパラメータをform1に送り返します。どのようにC#でこれを行うことができますか?私はこれを行うためにプロパティを使用している人々を見てきましたが、例は十分にはっきりしていません。誰かが私がどのようにパラメータを渡すことができるか私に示すいくつかのコード例を与えることができますか?私はプロパティメソッドを好むだろうが、それが動作する限り、私は答えとして数えます。C#でのフォーム間のパラメータの受け渡し

答えて

10

簡単に言えば、フォーム要素を通常通りに2番目のフォームに配置します。次に、パブリックアクセサーをそのフォームに追加して、そこから引き出して参照することができます。たとえば、Form2のは、あなたが戻って引っ張ってみたかったテキストフィールドを持っている場合、あなたは可能性:

class Form2 
{ 
    // Form2.designer.cs 
    private TextBox TextBox1; 

    // Form2.cs 
    public String TextBoxValue // retrieving a value from 
    { 
    get 
    { 
     return this.TextBox1.Text; 
    } 
    } 

    public Form2(String InitialTextBoxValue) // passing value to 
    { 
    IntiializeComponent(); 

    this.TextBox1.Text = InitialTextBoxValue; 
    } 
} 

あなたはOpenFileDialog等のファイル名の場合と同じよう(フォームを作成するときにだけ、後でそれにアクセス

public void Button1_Click(object sender, EventArgs e) 
{ 
    Form2 form2 = new Form2("Bob");  // Start with "Bob" 
    form2.ShowDialog();     // Dialog opens and user enters "John" and closes it 
    MessageBox.Show(form2.TextBoxValue); // now the value is "John" 
} 

同じことはちょうどあなたがそれを検証/キャストしたい場合、フォームの値に依存し、またはそれ以外などのInt32、ブール、のために行うことができます。

Alternativly、あなたは内Modifiersプロパティで遊ぶことができますあなたがコントロールを公にすることができるフォームデザイナーそれは外部からアクセス可能です。私は個人的には、値をダンプするのではなく、返された結果を検証して確認できるようにアクセサーを使用することをお勧めします(Form2を呼び出す/使用するすべてのインスタンスではなく、フォーム自体に通常見られるため)

+0

form1からform2パラメータを渡すことができる方法はありますか?同じコードで2番目のform1が作成されます。 –

+0

Form2の構文をパラメータとして提供するか、ShowDialogを呼び出す前に設定する他のプロパティを使うことができます(ただし、 'InitializeComponent()'の後にコントロールを変更する必要があります)それらのproeprtiesがフォームの表示方法に実際に影響している場合)。 –

+0

@DazSlayer:別のフォームに値をプッシュしたり、別のフォームから値を取得したりするために、サンプルにさらに情報を追加しました。 –

4

ここIは、パラメータ(複数可)へと戻って別のフォームからを通過したい方法である:この例では

Form1 and Form2

、上の「txtBoxForm1」テキストボックス:をForm1とForm2のための次のフォームデザインを提供

Form1は、 'txtBoxForm2'テキストボックスを初期化するために使用されるForm2に渡されます。 Form2。ユーザーがForm2と対話して[Return to Form1]ボタンをクリックすると、 'txtBoxForm2'テキストボックスの値が、Form1の 'txtBoxForm1'テキストボックスに(参照によって)返されたパラメータに割り当てられます。 Form1ので

ステップ1)、にShowDialog()メソッドオーバーロードによってフォーム2にパラメータを渡す:これは、2つの簡単な手順で行われるコーディング

上記で

public partial class Form1 : Form 
{ 

    public Form1() 
    { 
     InitializeComponent(); 
    } 

    private void btnSend_Click(object sender, EventArgs e) 
    { 
     Form2 f2 = new Form2(); 

     //Step 1) 
     //Display the form passing parameter(s) via overloading 
     //the ShowDialog() method. 
     //In this example the parameter is the 'txtBoxForm1' on Form1. 
     // f2.ShowDialog(); is replaced by 
     f2.ShowDialog(ref txtBoxForm1); 

    } 
} 

をコードでは、パラメータは、参照によって渡される 'txtBoxForm1'テキストボックスです。これを参照渡すのは、テキストボックス値をForm2に渡すだけでなく、Form2を実行しているときに、そのテキストボックスパラメータに適用された変更をForm1で受け取って表示することができる理由です。

Form1クラス全体を入れて、 'f2.ShowDialog()'メソッド呼び出しのオーバーロードよりもこのクラスで特別なことがないことを示しました。オーバーロードにShowDialog()メソッドを介してパラメータを受信し、戻り

工程2)

public partial class Form2 : Form 
{ 

    public Form2() 
    { 
     InitializeComponent(); 
    } 

    private void btnReturn_Click(object sender, EventArgs e) 
    { 
     this.Close(); 
    } 

    //Step 2) 
    //Receiving and returning parameter(s) via the overloaded ShowDialog() method. 
    //This saves the need to have Properties and or fields associated 
    //to parameters when overloading the above Form() constructor instead. 
    public void ShowDialog(ref TextBox txtBoxForm1) 
    { 
     //Assign received parameter(s) to local context 
     txtBoxForm2.Text = txtBoxForm1.Text; 

     this.ShowDialog(); //Display and activate this form (Form2) 

     //Return parameter(s) 
     txtBoxForm1.Text = txtBoxForm2.Text; 
    } 
} 

再び私はどのように限定示すために完全な形クラス(フォーム2この場合)コードを供給しましたコーディングの介入。ここで追加のフィールドやプロパティは必要ありません。これは、Form1のForm2コンストラクタではなく、 'ShowDialog()'命令を使用してパラメータを渡すためです。 Form2()コンストラクタとは異なり、ShowDialog()メソッドは、Form2とのユーザー対話フェーズの周りのエンベロープです。このように、そのタイミングは、 '(ref txtBoxForm1)'パラメータが、送受信したいパラメータの完全で十分な表現であることを可能にする。

異なるパラメータセット(シグネチャとも呼ばれます)を使用してメソッドをオーバーロードすると、メソッドのオーバーロードがC#.netの強力な機能となります。この場合、ここでは、一方では 'ShowDialog()'メソッドの呼び出しにパラメータを追加できますが、オーバーロードされたメソッドはこの同じメソッドの元のバージョンから何も失われません。 ShowDialog().netフレームワークメソッドは 'this.ShowDialog();'を介して同様に実行されます。命令。

これは私にとって今のところそれです。

これが役に立ちます。

+0

参照を処理するのに最適なソリューション –

関連する問題