C#程序窗体间使用回调事件方式通讯示例

首先需要注意的是,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技术站

(0)
上一篇 2023年6月7日
下一篇 2023年6月7日

相关文章

  • C#中实现输入汉字获取其拼音(汉字转拼音)的2种方法

    C# 中实现输入汉字获取其拼音,通常有两种方法: 1.使用第三方库 pinyin4net pinyin4net 是一个流行的 C# 第三方库,用于将汉字转化为拼音。其基于 python 编写,提供了简单易用的 API。 安装过程 可以通过 NuGet 安装 pinyin4net 包,也可以直接到官网下载源代码。 具体安装步骤: 在 Visual Studio…

    C# 2023年6月7日
    00
  • asp.net ubb使用代码

    当我们在开发一个网站或者一个论坛系统时,通常都需要使用 UBB(ultra bulletin board) 编辑器。在 ASP.NET 中,使用 UBB 编辑器可以轻松实现文字编辑、图片上传、表情等功能。而如何使用 ASP.NET 代码实现 UBB 编辑器的功能呢?下面是一个完整的攻略。 步骤一:引用 UBB 控件 首先,在 ASP.NET 项目中,我们需要…

    C# 2023年5月31日
    00
  • C# BinaryReader.Read – 读取基本数据类型

    BinaryReader.Read 方法的作用 BinaryReader 是一个用于读取二进制数据的类。它提供了不同数据类型的读取方法,其中就包括了 Read 方法。 BinaryReader.Read 方法的作用是:从当前流中读取任意类型的数据。此方法从流中读取一个或多个字节,而每个字节都用来构建指定类型的值。 使用方法攻略 为正确使用 BinaryRea…

    C# 2023年4月19日
    00
  • c#自定义泛型类的实现

    实现自定义泛型类的步骤如下: 定义泛型类 定义一个泛型类,可以使用 class 关键字,紧随其后的是类名和泛型参数列表。然后在类中可以使用泛型参数,类似于普通的类型。例如: public class MyGenericClass<T> { private T data; public MyGenericClass(T data) { this.d…

    C# 2023年6月7日
    00
  • C#求n个数中最大值和最小值的方法

    C#求n个数中最大值和最小值的方法 在 C# 中求解 n 个数中最大值和最小值有多种方法,下面将给出两种常用的方法: 方法一:使用 Arrays 类的 Sort 和第一个元素和最后一个元素的方法 这种方法先使用 Arrays 类的 Sort 方法将所有数从小到大排序,然后取出排序后的第一个元素作为最小值,最后一个元素作为最大值。 示例代码如下: int[] …

    C# 2023年6月1日
    00
  • C#获得文件属性信息的实现方法

    下面是C#获得文件属性信息的实现方法的完整攻略。 1.获取文件信息对象 要获取文件属性信息,需要先获取文件信息对象。C#中可以使用FileInfo类来获取文件信息对象,具体代码如下: FileInfo fileInfo = new FileInfo("test.txt"); 其中,test.txt是要获取属性信息的文件名,可以根据具体情况…

    C# 2023年6月1日
    00
  • C#实现DataTable,List和Json转换的方法

    下面是详细讲解“C#实现DataTable,List和Json转换的方法”的完整攻略: 如何把DataTable转换成Json 我们可以使用Json.Net库来实现将DataTable转换成Json的功能。使用此库需要先安装Newtonsoft.Json NuGet Package。 以下示例展示了一种将DataTable转换成Json的方法: using …

    C# 2023年5月31日
    00
  • c#委托与事件(详解)

    C#委托与事件(详解) 什么是委托? 在C#中,委托是一个类,用于指向和调用一个或多个方法。可以将委托看做是方法的类型。通过委托,我们可以在运行时确定要调用哪个方法,而无需提前确定调用哪个方法。 如何定义委托? 在C#中,委托的定义非常简单,只需使用delegate关键字即可。 delegate 返回类型 委托名称(参数列表); 其中, 返回类型:委托指向方…

    C# 2023年6月1日
    00
合作推广
合作推广
分享本页
返回顶部