闲话少叙,(二)里面已经演示了子窗体传递到主窗体的不成功。
对于原因的猜测或者解释,希望有大牛看到给我指点一下。
我直接上可以正常传递消息的方式。
简而言之,不再使用event,而是使用delegate,委托。
与前两篇的不同点:
1.不需要MyEventArg.cs来传参了,因为委托的参数形式比event灵活很多。
2.代码量更少。
3.主要变化就是当程序还运行在form1内容时,就把form2里的那个委托注册为form1里的某个函数,这样就可以控制form1里的控件了。
用到的文件只有两个。
form1.cs form2.cs
Form1.cs
using System;
using System.Windows.Forms;
namespace WindowsFormsApp1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
Form2 form2 = new Form2();
form2.Slave2MainDele += textChange; //总之就是先把form2里的这个事件注册为form1里的内容
form2.Show();
}
public void textChange(string msg)
{
textBox1.Text = msg;
}
}
}
Form2.cs
using System;
using System.Windows.Forms;
namespace WindowsFormsApp1
{
public delegate void Slave2MainDelegate(string topmost); //定义委托
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
}
public Slave2MainDelegate Slave2MainDele;//定义委托实例
private void button1_Click(object sender, EventArgs e)
{
Slave2MainDele.Invoke(DateTime.Now.ToString());
}
private void Form2_Load(object sender, EventArgs e)
{
}
}
}
亲测可行。
ps:这三篇文章,都是.NET 4.7 环境,windows 10 专业版, 64bit。
但这应该不是什么特别需要强调的地方。
专题完毕。
在此不讨论其余一些通过公用变量之类的比较“low”的通信方式。