C# 更新打开(活动)表单之间的值

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

我有一个主窗体,可以打开另一个窗体(目前最多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";

    }
另外,供您参考,我的所有子窗体都将具有相同的布局。所以我继承了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对这个问题没有影响,您可以在记事本中编写代码并从命令行编译它,但仍然存在相同的问题。请仅包括相关标签,请阅读标签说明以了解信息。