例如Form1中存在Click事件,在Click中添加一个方法OnClick触发事件
public void OnClick(...)
{
Click(this, new EventArg...())
}
在Form2中加一个成员变量Form parentForm;
建立Form2的时候把Form1传给Form2,然后在Form2中parentForm.OnClick(...)
回调函数。也就是委托
在form2中声明一个public 委托、声明委托对象。form中声明form2对象的时候。初始化委托对象。
例子
delegate void DemoDeletegate();//命名空间下
DemoDeletegate _demoDeletegate;
public DemoDeletegate Demodeletegate
{
set { _demoDeletegate = value; }
}
public Form2()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{//调用委托对象
_demoDeletegate();
}
form1 中的代码
private void show
{
Form2 f2 = new Form2();
f2.Demodeletegate += new DemoDeletegate(Methods);
}
private void Methods()
{
this.BackColor = Color.Red;
}
ok
这属于类间的通信方法,大概有以下几种方案
1.正向获取,同1楼,Form1暴露出一个方法,再传递参数过去,确定不知道数据什么时候准备好了
2.反向获取
1)通过类的静态变量传递数据,把调用放回Form2,缺点:性能不好,违反oop原则
2)通过堆栈对象复制数据通信,把调用放回form2,具体实现同2.1差不多,但装箱后安全性上来了
3)事件机制,同二楼,这个最常用了
看CSDN上一篇文章总结的,详细原文可以去搜搜 就叫 类间通信,里面有详细讲解
不用那么麻烦的, 这样就行了,
你不是想在form2 里面点一个按钮 执行form1的一个按钮的事件 怎么弄吗
你要先在Form2里这样写
form1 f1 = new from1
f1.objform2=this;
f1.show();//
在Form2里的定义一下form2
objform2= new form2();
现在再用objform2调用form2里的事件就可以了,不行的话再问我,呵呵就是这样的,我以前就是这样用的,用了几年了,呵呵