介绍
主要解决不同窗体的交互问题,为了减少类与类之间的耦合,使用事件绑定的方法,借鉴博客:(https://blog.csdn.net/lisenyang/article/details/18350271)。。
非模态的交互
1、思路
本文以Form1、Form2为例,Form2的按钮去控制Form1的函数。寻常的思路是Form2中实例化Form1,然后用button_Click控制调用form1的某个函数。而非模态的交互则是利用事件的绑定,思路如下:
1、在Form2中定义一个事件:
public event EventHandler ButtonClickEvent;
2、form1中写一个方法:
void Function1(Object sender,EventArgs e)
{
MessageBox.Show("主窗体事件");//TODO
}
3、在Form1中绑定Form2定义的事件(假设点击按钮弹出form2对话框):
private void button1_Click(object sender, EventArgs e)
{
form2 fm2 = new form2 ();
fm2 .ButtonClickEvent += Function1;
ctt.Show();//用Show不关闭form2也可以对form1操作,ShowDialog不关闭则不能对其他窗体操作
}
如果想从让form1里的控件去控制form2的函数的话,以上思路中的form1和form2对调一下即可。
![](https://img.haomeiwen.com/i16824219/1a94b9ed32fbd9e6.png)
2、源码
Form1:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
Form2 fm2 = new Form2();
fm2.ButtonClickEvent += Function1;
fm2.Show();
}
void Function1(Object sender, EventArgs e)
{
MessageBox.Show("主窗体事件");//TODO
}
}
Form2:
public partial class Form2 : Form
{
public event EventHandler ButtonClickEvent;
public Form2()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
ButtonClickEvent(this, e);
}
}
网友评论