2016-04-23 224 views
-1

我是新的C#編程。我有一個初學者級別的問題: 如何使用form1中的按鈕更改我的表單2對象中textbox1的text屬性?從Form2中更改Form1的TextBox文本在C#

這是我在Form1代碼:

namespace DoubleForms 
{ 
    public partial class Form1 : Form 
    { 

     public Form1() 
     { 
      InitializeComponent(); 
     } 

     private void button1_Click(object sender, EventArgs e) 
     { 
      Form2 frm2 = new Form2(); 
      frm2.Show(); 
     } 
    } 
} 

這是在窗口2:

namespace DoubleForms 
{ 
    public partial class Form2 : Form 
    { 


     public Form2() 
     { 
      InitializeComponent(); 
     } 

     private void button1_Click(object sender, EventArgs e) 
     { 
      Form1 frm1 = new Form1(); 
      frm1.textBox1.Text = "Test"; 

     } 
    } 
} 
+1

的可能的複製[如何更新從窗口2 form1的文本框?](http://stackoverflow.com/questions/7969582/how-to-update-textbox-in-form1-from-form2) – raidensan

回答

1

當您添加一個文本框或使用控件工具箱中控制該問題的任何控制,一個WinForm被添加爲私有的,因此無法在其創建的類之外訪問它。容易修復,雖然只是添加了一個公共屬性,可讓您獲取和設置文本框的值。

namespace DoubleForms 
{ 
    public partial class Form1 : Form 
    { 
     // NEW CODE 
     public string TextBoxText 
     { 
      get { return this.textBox1.Text; } 
      set { this.textBox1.Text = value; } 
     } 

     public Form1() 
     { 
      InitializeComponent(); 
     } 

     private void button1_Click(object sender, EventArgs e) 
     { 
      Form2 frm2 = new Form2(); 
      frm2.Show(); 
     } 
    } 
} 

然後從Form2中,您可以調用form1.TextBoxText =「blah blah」來設置值。

0

每次單擊按鈕時,代碼都會創建新的Form1,這不是我想要的。

您需要做的是在Form2中創建一個事件,然後在Form1中訂閱該事件,這樣您就可以從Form2收聽更改並更新Form1

namespace DoubleForms 
{ 
    public partial class Form2 : Form 
    { 
     public event EventHandler Updated; // define an event handler 

     public Form2() 
     { 
      InitializeComponent(); 
     } 

     private void button1_Click(object sender, EventArgs e) 
     { 
      if(Updated != null) 
      { 
        Updated(sender, new EventArgs()); //Raise a change. 
      } 
     } 
    } 
} 

現在Form1訂閱Form2事件。

namespace DoubleForms 
{ 
    public partial class Form1 : Form 
    { 
     public Form1() 
     { 
      InitializeComponent(); 
     } 

     private void button1_Click(object sender, EventArgs e) 
     { 
      Form2 frm2 = new Form2(); 
      frm2.Updated += (se,ev)=> textBox1.Text = "Test"; // update textbox 
      frm2.Show(); 
     } 
    } 
}