C# 更新打开(活动)表单之间的值
我有一个主窗体,可以打开另一个窗体(目前最多3个窗体) 我使用以下代码从主窗体打开窗体:C# 更新打开(活动)表单之间的值,c#,forms,winforms,C#,Forms,Winforms,我有一个主窗体,可以打开另一个窗体(目前最多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
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";
}
另外,供您参考,我的所有子窗体都将具有相同的布局。所以我继承了1个设计中的所有内容(比如form1:form2)
我将非常感谢您的回复您希望有一个模型(一个简单的类、列表或数据表)被多个控件监视
模型
首先有一个类作为模型:
public class PhoneModel
{
public string SomePhone { get; set; }
}
编译此文件,以便在添加
绑定源
。。。到网络表单的设计器:
将DataSource
属性设置为对象,然后选择PhoneModel
类。将
修饰符
属性设置为受保护
对名为p
的基类执行相同的操作
在文本框中
在属性中选择数据检验设置
:
子类表单处理
我不知道为什么有两个不同的类,但让我们保持这一事实
将构造函数添加到每个类中,这些类将接受调用者提供的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" };
}
这就是全部。当您在其中一个文本框中输入值时,所有打开表单上的所有值都将更新,因为BindingSource更新了绑定到的所有控件,如本演示中所示:
我建议使用.showDialog()而不是.show()。这样,当_p2关闭时,_p2中的数据不会消失。您仍然可以从p1中的p2访问数据。在调用.showDialog()之前,可以使用_p1中的数据设置_p2变量的值。然后,当您最终调用.showDialog()时,它将显示您之前设置的所有数据。谢谢您的帮助,但我希望得到一些简单的东西,比如说,我有两个live表单。当用户在form1(比如p1)的文本框中键入内容并按下call p2(一个按钮)时,p2(form 2)文本框应使用用户键入的p1表单中的文本进行更新。希望现在已经很清楚了。还在努力,让你知道。但无论如何,谢谢你的标签不相关。您使用的IDE对这个问题没有影响,您可以在记事本中编写代码并从命令行编译它,但仍然存在相同的问题。请仅包括相关标签,请阅读标签说明以了解信息。