有三个窗口,每个窗口都有一个文本框,在任意一个文本框输入信息都能反映在其他两个窗口的文本框中.
主窗口为Form1,副窗口为Form2,Form3
一、两个副窗口与主窗口之间的通讯:
1.在副窗口类中声明一个主窗口对象,并修改副窗口构造函数,为此函数增加一个主窗口对象参数
//Form2.cs
public partial class Form2 : Form
{
private Form1 f1;
public Form2(Form1 f1)
{
InitializeComponent();
this.f1 = f1;
}
}
//Form3.cs
public partial class Form3 : Form
{
private Form1 f1;
public Form3(Form1 f1)
{
InitializeComponent();
this.f1 = f1;
}
}
2.在主窗口类中声明副窗口对象,并调用上述构造函数将主窗口对象传递给副窗口
//Form1.cs
private void btnForm2_Click(object sender, EventArgs e)
{
Form2 f2 = new Form2(this);
f2.Show();
}
private void btnFrom3_Click(object sender, EventArgs e)
{
Form3 f3 = new Form3(this);
f3.Show();
}
3.在副窗口类中将传递过来的主窗口对象赋值给刚才声明的主窗口对象
就是1.中的this.f1 = f1;
4.这样就可以在副窗口中通过声明的主窗口对象引用主窗口中的控件了.
//Form2.cs
private void txtForm2_TextChanged(object sender, EventArgs e)
{
f1.txtForm1.Text = txtForm2.Text;
}
//Form3.cs
private void txtForm3_TextChanged(object sender, EventArgs e)
{
f1.txtForm1.Text = txtForm3.Text;
}
现在在副窗口的文本框中输入信息,主窗口的文本框也会同步接收.但副窗口之间的文本框并不同步.
图1:http://images.cnblogs.com/cnblogs_com/chinese-owen/396647/r_5636.png
二、两个副窗口之间的通讯:
以主窗口为桥梁实现通讯
1.在主窗口类中将副窗口对象的声明提到函数外面,这样主窗口类中的函数都可以引用副窗口对象
//Form1.cs
public partial class Form1 : Form
{
private Form2 f2;
private Form3 f3;
public Form1()
{
InitializeComponent();
}
private void btnForm2_Click(object sender, EventArgs e)
{
f2 = new Form2(this);
f2.Show();
}
private void btnFrom3_Click(object sender, EventArgs e)
{
f3 = new Form3(this);
f3.Show();
}
}
2.在主窗口类中通过刚提出来声明的副窗口对象引用副窗口中的控件
//Form1.cs
private void txtForm1_TextChanged(object sender, EventArgs e)
{
try
{
f2.txtForm2.Text = txtForm1.Text;
f3.txtForm3.Text = txtForm1.Text;
}
catch (Exception ex)
{
MessageBox.Show(ex.Message,"请先打开窗口2和3!");
return;
}
}
通过一,二两步就可以实现3个窗体间的控件通讯了。
图2:http://images.cnblogs.com/cnblogs_com/chinese-owen/396647/r_110436.png