首先需要注意的是,C#窗体间的通讯方式有很多种,而使用回调事件方式通讯是其中一种较为常见的方式。实现回调事件通讯,需要了解委托和事件的相关知识。
一、委托和事件
委托(Delegate)是C#中一个非常重要的概念,它可以看做是一个函数指针,可以指向一个或多个方法。而事件(Event)则是使用委托的一种方式,可以通过事件来触发委托执行。
在C#中声明委托,需要使用delegate关键字,如下所示:
delegate void MyDelegate(double d);
这段代码定义了一个委托类型MyDelegate,它可以指向一个返回值为void,参数类型为double的方法。我们也可以使用lambda表达式来简化委托类型的定义:
delegate void MyDelegate(double d);
MyDelegate del = d => Console.WriteLine(d);
此时,MyDelegate委托已经指向了lambda表达式所表示的方法。
二、使用回调事件方式通信的示例
下面我们通过两个示例,来演示C#中使用回调事件方式进行窗体间通讯的方法。
示例一:子窗体向父窗体传递数据
在这个示例中,我们有两个窗体,一个是父窗体,另一个是子窗体。当点击子窗体中的按钮时,子窗体会向父窗体传递一个数据,并关闭自身。父窗体接收到数据后,将数据显示在自身的文本框中。
首先,在父窗体中定义一个委托类型和事件:
delegate void MyDelegate(string str);
public event MyDelegate MyEvent;
在子窗体中,我们需要使用父窗体传递过来的委托来触发事件。代码如下:
public partial class ChildForm : Form
{
private MyDelegate callback;
public ChildForm(MyDelegate callback)
{
InitializeComponent();
this.callback = callback;
}
private void btnSend_Click(object sender, EventArgs e)
{
callback?.Invoke(txtData.Text.Trim());
Close();
}
}
在父窗体中,我们需要将子窗体传出的委托赋值给我们定义的委托,然后在事件处理函数中接收到子窗体传递过来的数据,最后将数据显示在父窗体的文本框中。代码如下:
public partial class ParentForm : Form
{
public ParentForm()
{
InitializeComponent();
ChildForm childForm = new ChildForm(SetText);
MyEvent += new MyDelegate(SetText);
}
private void btnOpenChild_Click(object sender, EventArgs e)
{
ChildForm childForm = new ChildForm(MyEvent);
childForm.ShowDialog();
}
private void SetText(string str)
{
txtData.Text = str;
}
}
示例二:父窗体向子窗体传递数据
在这个示例中,我们有一个父窗体和一个子窗体。父窗体中有一个按钮,当点击按钮时,子窗体会弹出,父窗体会向子窗体传递一个数据。子窗体接收到数据后,将数据显示在自身的文本框中。
首先,在子窗体中定义一个委托类型和事件:
delegate void MyDelegate(string str);
public event MyDelegate MyEvent;
在父窗体中,我们需要将子窗体传入的委托赋值给我们定义的委托,然后在事件处理函数中通过触发事件,并传递需要传递的数据。代码如下:
public partial class ParentForm : Form
{
public ParentForm()
{
InitializeComponent();
}
private void btnOpenChild_Click(object sender, EventArgs e)
{
ChildForm childForm = new ChildForm(MyEvent);
MyEvent += new MyDelegate(childForm.SetText);
childForm.ShowDialog();
}
private void MyEvent(string str)
{
txtData.Text = str;
}
}
在子窗体中,我们需要接收到父窗体传递过来的委托,并在事件处理函数中接收到父窗体传递过来的数据,最后将数据显示在子窗体的文本框中。代码如下:
public partial class ChildForm : Form
{
private MyDelegate callback;
public ChildForm(MyDelegate callback)
{
InitializeComponent();
this.callback = callback;
}
public void SetText(string str)
{
txtData.Text = str;
}
}
以上便是使用回调事件方式进行C#窗体间通信的实现攻略。通过上述示例的分析,我们可以看出,使用回调事件方式通信的优点是代码相对简洁,实现起来比较直观,特别是在需要多个控件之间进行通信时无疑更加方便。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#程序窗体间使用回调事件方式通讯示例 - Python技术站