在打开(实时)表单之间更新值

我有一个主要forms,允许打开另一种forms(此时最多3个表格)。

我使用以下代码从主窗体打开表单:

public partial class network : Form { p1 _p1 = new p1(); p2 _p2 = new p2(); public network() { InitializeComponent(); } private void Phone1_Click(object sender, EventArgs e) { _p1.Show(); //Phone1off.Visible = true; //networklog.Items.Add("Phone 1 added"); } 

上面的代码工作正常。

现在,问题是当我说我从主窗体中打开了两个窗体并在子窗体1中键入了某些东西然后想要以子窗体2显示它。 我无法做到。

此时我编码如下:

 public string TextBoxValue { get { return textBox1.Text; } set { textBox1.Text = value; } } private void button2_Click(object sender, EventArgs e) { p2 _p2 = new p2(); textBox1.Text = ""; textBox1.Text = "Calling Phone 2"; _p2.TextBoxValue = "Phone 1 Calling"; } 

同样为了您的信息,我所有的孩子表格将具有相同的布局。 所以我inheritance了1个设计(比如form1:form2)

我将非常感谢您的回复

您正在寻找DataBinding,以便由多个控件监视一个Model(一个简单的类,List或Datatable)。

模型

首先要有一个充当模型的类:

 public class PhoneModel { public string SomePhone { get; set; } } 

编译它,以便设计师在添加时可以找到该类…

BindingSource的

…给您的网络表单的设计者: BindingSource的

DataSource属性设置为对象,然后选择PhoneModel类。
Modifiers属性设置为Protected

对你的基类P做同样的事情。

TextBox中,在属性中选择DataBinsdings settings

每个控件的数据绑定

Subclassed表格处理

我不确定为什么有两个不同的类但是让我们把它作为一个事实。

向每个接受来自调用者的BindingSource实例的类添加一个构造函数。 我们使用该实例更新每个表单BindingSource。

 public class P1 : P { public P1(BindingSource bs):base() { base.bindingSource1.DataSource = bs.DataSource; } } 

对每个需要同步其值的表单执行此操作

将您的网络表单连接到P1和P2实例

在网络表单上的按钮的单击事件中,通过在构造函数中提供BindingSource来启动P1或P2:

 private void button1_Click(object sender, EventArgs e) { new P1(this.bindingSource1).Show(); } 

并且您的模型已实例化,我使用Form_Load事件来执行此操作。

 private void Network_Load(object sender, EventArgs e) { this.bindingSource1.DataSource = new PhoneModel { SomePhone = "foo" }; } 

这就是全部。 当您在其中一个TextBox中输入值时,所有打开表单上的所有值都将更新,因为BindindingSource会更新它所包含的所有控件,如本演示中所示:

在更改时更新多个字段的演示

我建议使用.showDialog()而不是.show()。 这样,当_p2关闭时,_p2中的数据不会消失。 您仍然可以从_p1中的_p2访问数据。 在调用.showDialog()之前,可以使用_p1中的数据设置_p2变量的值。 然后,当您最终调用.showDialog()时,它将显示您之前设置的所有数据。