2016-04-23 94 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(); 
     } 
    } 
}