0
点赞
收藏
分享

微信扫一扫

C# winform 主窗体与子窗体互相传递消息的例子 (三)


闲话少叙,(二)里面已经演示了子窗体传递到主窗体的不成功。
对于原因的猜测或者解释,希望有大牛看到给我指点一下。
我直接上可以正常传递消息的方式。
简而言之,不再使用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

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

亲测可行。

ps:这三篇文章,都是.NET 4.7 环境,windows 10 专业版, 64bit。
但这应该不是什么特别需要强调的地方。
专题完毕。

在此不讨论其余一些通过公用变量之类的比较“low”的通信方式。


举报

相关推荐

0 条评论