C#中winform和WPF通过事件(委托)实现窗体间消息传递
本文主要介绍通过事件机制实现窗体间消息传递,winform和wpf均可使用。主要思路为:
- 创建两个窗体
- 在发送消息一方定义委托参数、委托、事件
- 在接受消息一方注册事件
- 在发送消息一方调用事件
一、定义委托参数、委托、事件
先在窗体类Form2(发送消息的窗体)中(也可单独在类外定义)定义委托参数,传递string类型的message。再根据这个参数定义委托,通过这个委托定义事件MessageUpdate,最后在一个按钮点击事件中调用MessageUpdate。
#region 事件定义与触发
//定义委托参数
public class MessageUpdateEventArgs : EventArgs
{
public string message { set; get; }
public MessageUpdateEventArgs(string message)
{
this.message = message;
}
}
//定义委托
public delegate void MessageUpdateHandler(object sender, MessageUpdateEventArgs e);
//定义事件
public event MessageUpdateHandler MessageUpdate;
//调用事件
private void button2_Click(object sender, EventArgs e)
{
MessageUpdateEventArgs args = new MessageUpdateEventArgs(textBox1.Text);
MessageUpdate(this, args);
}
#endregion
二、接受消息方注册事件
将发送消息方作为本窗体Form1(接受消息的窗体)的一个属性,并为事件注册事件处理函数,这样的好处是:事件虽然在Form2中被调用,但仍可访问到Form1的变量(如下所示的Form1的label1)由此实现了窗体间消息传递。
public Form2 f2 = new Form2();
public Form1()
{
InitializeComponent();
//显示Form2,
f2.MessageUpdate += MessageUpdate;
f2.Show();
}
#region 事件处理函数(可在构造函数处注册)
public void MessageUpdate(Object sender, Form2.MessageUpdateEventArgs args)
{
label1.Text = args.message;
}
#endregion
最终的效果是Form2点击按钮后会将textbox1的文本传送到Form1的label控件。