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日

相关文章

  • asp.net core 腾讯验证码的接入示例代码

    下面是 “asp.net core 腾讯验证码的接入示例代码” 的完整攻略: 1. 腾讯验证码介绍 腾讯验证码是腾讯公司开发的一种防机器人验证码。 它使用了图片旋转、文字扭曲等技术,旨在防止自动化程序通过暴力猜测或爬虫攻击来访问网站。 如今,腾讯验证码已经成为全球流行的验证码解决方案之一。 2. asp.net core 腾讯验证码接入步骤 步骤1:申请腾讯…

    C# 2023年5月31日
    00
  • c#网站WebConfig中域名引用示例介绍

    下面是“c#网站WebConfig中域名引用示例介绍”的完整攻略: 1. 简介 WebConfig是c#网站的配置文件,c#网站是一种基于.NET框架的网站开发语言。在WebConfig中,我们可以使用域名引用到其他网站或资源。 2. 域名引用的语法 在WebConfig中进行域名引用的语法格式如下: <configuration> <sy…

    C# 2023年5月31日
    00
  • C#简单的特殊输出实例

    接下来我将为您详细讲解使用C#实现特殊输出的方法。 1. 基础知识 在C#中,我们可以使用Console.WriteLine()方法来输出字符串,并使用{}将变量括起来输出变量的值。 例如: int age = 18; Console.WriteLine("My age is {0}", age); 输出结果为:My age is 18 …

    C# 2023年6月6日
    00
  • C++中const的实现细节介绍(C,C#同理)

    下面是关于C++中const的实现细节介绍的完整攻略。 const的含义和作用 C++中的const常量表示一个不可改变的变量,即该变量的值不允许被修改。const常量通常用于定义程序中不会改变的数据,例如PI的值。const的作用相当于定义了一个只读的变量。 const的定义和初始化 const常量可以在定义时被初始化,也可以在后面进行初始化。 定义时初始…

    C# 2023年5月14日
    00
  • C#中的预处理器指令详解

    下面是关于“C#中的预处理器指令详解”的完整攻略: 什么是预处理器指令 预处理器指令是C#源代码中的特殊指令,用来告诉编译器在编译代码之前执行一些特殊操作。预处理指令以#号开头,可以出现在任何位置。 预处理指令类型 C#中有以下10种预处理指令: define:用于定义符号常量。 if、#elif、#else、#endif:用于条件编译。 warning:用…

    C# 2023年5月14日
    00
  • C#中使用jieba.NET、WordCloudSharp制作词云图的步骤

    下面我将为您详细讲解 C# 中使用 jieba.NET 和 WordCloudSharp 制作词云图的步骤。 准备环境 首先,您需要准备好以下环境: .NET Framework 4.0 及以上版本; jieba.NET; WordCloudSharp。 安装 jieba.NET jieba.NET 是一个分词工具,可以将文本分解成单词。您可以将其安装到您的…

    C# 2023年5月31日
    00
  • LZW数据压缩算法的原理分析

    LZW数据压缩算法是一种基于字典的数据压缩算法,它通过构建字典来实现对输入数据的压缩。其主要流程如下: 1.初始化:先将所有单个字符加入字典中。 2.构建字典:从输入数据中读取第一个字符,然后依次读取字符直到在字典中找不到该字符串。将这个字符串(除最后一个字符)在字典中的下标输出并加入字典中,然后从下一个字符重新开始读取。 3.压缩:每次从输入数据中读取一个…

    C# 2023年6月7日
    00
  • C#实现将32位MD5摘要串转换为128位二进制字符串的方法

    要将32位MD5摘要串转换为128位二进制字符串,可以使用以下方法: 将32位MD5摘要串转换为字节数组(一般是长度为16的字节数组)。 将字节数组转换为128位二进制字符串。具体方法是将每个字节转换为8位二进制字符串,然后将所有字节的8位字符串连接起来即可。 以下是C#实现的代码: using System; using System.Security.C…

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