问题具体描述是:在Form1里面点击一个按钮,可以执行另外一个Form2里一个按钮对应的事件。像一个登陆界面,一个测试网络的界面,我要点登陆界面的登陆键,可以直接开启测试网络界面一个测试键对应的事件。
我实验过,如果把测试网络界面的测试键对应的事件设法移植到登陆键,很容易造成代码的冗杂,很难看懂。鄙人学识浅薄,还望提点,是否有优化的方案去解决这个问题。
这个可以使用 委托 解决。
用委托, 自定义事件
http://www.cnblogs.com/BLoodMaster/archive/2010/07/06/1771926.html
我研究下,这个可以有
在A窗体定义一个public void fun() 方法,在它的click事件中执行此fun()方法。 在B窗体中就可以用A.fun(),实现在B窗体中执行A窗体的事件
如果Form1是父窗体,Form2是在Form1中new出来的,那么把Form2的那个方法直接公开,Form1就可以调用了
如果Form2是父窗体,Form1是在Form2中new出来的,那么就需要用委托:
在Form1中定义委托,在Form1中调用委托,在Form2中订阅委托,并实现。
如果Form1和Form2没有父子关系,都是被另外一个窗体new出来的,那么就意味着只是想去掉重复代码,只要新建一个类,把这段代码放入其中,然后Form1和Form2都调用这个类就可以了。
用委托可以解决,或者是用事件都可以
若是要在Form2中更改Form1中空间的属性(或调用方法),可以用以下操作:
Form1.cs :
namespace 项目名称
{
public partial class Form1 : Form
{
private Form2 form2;
public Form1()
{
InitializeComponent();
form2 = new Form2(this);
}
//执行其他操作
}
}
Form2.cs :
namespace 项目名称
{
public partial class Form2 : Form
{
private Form1 form1;
public Form2(Form1 form1)
{
InitializeComponent();
this.form1 = form1;
}
//执行其他操作
}
}
以上代码我试过了,是有效的
希望对大家有效!!!