2012-01-10 8 views
0

Form2からForm1にいくつかのデータを返そうとしていますが、データはすべて取得されているようですが、データをテキストボックスに渡そうとすると、テキストを変更しません。私がForm1の新しいインスタンスを開いた場合にのみ、Form2上で動作します。なぜこれが起こるのですか?古いインスタンスにテキストを送信できませんか?新しいインスタンスを開くことなくフォームにデータを返す

私はこのコードを使用しています。

をForm1(メインフォーム)

public void updateText(string data) 
{ 
    MessageBox.Show(data); 
    txtGood.Text = data; 
} 

Form2 SecondaryForm = new Form2(); 

SecondaryForm.ShowDialog(); 

のForm2(ユーザデータと第二の形式)

Form1 MainForm = new Form1(); 
MainForm.updateText(data); 
MainForm.ShowDialog(); 
this.Close(); 

だから、私の質問は、私は古いインスタンスにデータ値を渡すことができる方法であり、メインフォーム?新しいインスタンスを作成して新しいインスタンスを表示する必要はありません。これを行う方法はありますか?

答えて

3

MainForm(Form1)の参照をsecond Form(Form2)に渡すことができます。次にMainFormを作成する代わりに、参照を使用してtextboxを更新してください。

//pass reference to form2 
    Form2 SecondaryForm = new Form2(mainForm); 
    SecondaryForm.ShowDialog(); 

    //in the constructor of Form2 save the reference of Form1 
    Form1 form1 = null 

    Form2(Form1 mainForm) 
    { 
     form1 = mainForm; 
    } 

    //then instead of creating a new MainForm again just use reference of Form1 

    form1.updateText(data); 
    this.Close() 
+0

は君たちをありがとうございます。私は最初のソリューションを使用しています。 –

4

これは、Form2コードでForm1のインスタンスを作成しているためです。あなたがしたいのは、Form2のparentFormをそれを作成したForm1のインスタンスに設定することです。

public partial class Form1 : Form 
{ 
    public void CreateForm2() 
    { 
     Form2 form2 = new Form2(this); 
     form2.ShowDialog(); 
    } 

    public string MyTextboxText 
    { 
     get { return txtMyTextbox.Text; } 
     set { txtMyTextbox.Text = value; } 
    } 
} 

public partial class Form2 : Form 
{ 
    private Form1 parentForm; 

    public Form2(Form1 parentForm) 
    { 
     this.parentForm = parentForm; 
    } 

    public void myButtonClick() 
    { 
     parentForm.MyTextboxText = "Hello"; 
    } 
} 

このコードは単なる例であり、現状ではコンパイルされていない可能性があります。

+0

ありがとう。私は最初のソリューションを使用しています。 –

+0

親愛なるMatthewには、フォームのparentFormを設定することはできません。 – Victor

0

メインフォーム:

private void Button2_Click(object sender, EventArgs e) { 
    frmCustomersRecord rec = new frmCustomersRecord(this); 
    rec.ShowDialog(); 
    rec.GetData(); 
} 

子フォーム:

public partial class frmCustomersRecord : Form 
{ 
    public frmCustomersRecord() 
    { 
     //blank contructor (Instance of an class) 
    } 

    frmCustomerDetails cd; 

    public frmCustomersRecord(frmCustomerDetails parentForm) : this() 
    { 
     this.cd = parentForm; 
    } 
    //call the methods using child form object 
} 
関連する問題