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

yizhihongxing

首先需要注意的是,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++中访问字符串的三种方法总结

    C++中访问字符串的三种方法总结 在C++中,有多种方法可以访问字符串,下面我们来总结一下常见的三种方法。 方法一:使用数组 使用数组访问字符串的方法非常简单,字符串在C++中可以看做是一个字符数组,因此我们可以通过数组的下标访问字符串中的每一个字符。例如,假设我们有一个字符串s,我们可以通过s[i]来访问字符串中的第i个字符。字符串的最后一个字符索引为字符…

    C# 2023年6月8日
    00
  • asp.net2.0实现邮件发送(测试成功)

    下面是详细的攻略: 1. 环境准备 在实现邮件发送之前,需要先安装 SmtpClient 类。在 asp.net 2.0 中,这些类已经默认安装在 System.Net.Mail 命名空间中了。因此,我们在编写代码之前,需要确保已经引入了该命名空间。 2. 编写邮件发送代码 在 asp.net2.0 中,发送邮件的代码主要是利用 System.Net.Mai…

    C# 2023年5月31日
    00
  • 游戏开发之随机概率的选择算法

    游戏开发中,随机数算法是一个非常重要的部分,它常常被用来在游戏当中生成随机的事件、物品、角色属性等等。而其中选择算法则是如何从一个固定的集合中,按照一定的概率来随机选择一个目标的算法。 以下是游戏开发中常用的三种选择算法: 1. 等概率随机算法 这种算法是最简单的一种,它的实现原理是先生成一个 0-1 之间的随机数,然后将这个随机数乘以集合元素的个数,将结果…

    C# 2023年6月7日
    00
  • C#基础教程之类class与结构struct的区别

    下面是对于C#基础教程中class与struct的区别的详细讲解: 什么是class与struct class和struct都是C#中用于封装数据和行为的能力。他们两个非常相似,并且可以实现相同的功能。 class是引用类型,struct是值类型。使用class类型创建的对象,会在堆中分配内存。当你使用new操作符实例化一个类对象时,实际上是在堆上为类分配了…

    C# 2023年5月31日
    00
  • asp.net core 腾讯验证码的接入示例代码

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

    C# 2023年5月31日
    00
  • JWT.net 操作实践方法

    JWT.net 操作实践方法 JSON Web Token(JWT)是一种基于JSON格式的Web Token标准,用于在不信任的环境下对用户进行身份验证和授权。JWT.net是一个C#中的JWT实现库,本篇文章将介绍如何使用JWT.net进行JWT生成、验证、签名等操作。 安装 可以通过NuGet包管理器或者命令行安装JWT.net: Install-Pa…

    C# 2023年5月31日
    00
  • Unity使用DoTween实现抛物线效果

    Unity使用DoTween实现抛物线效果 简介 在游戏设计中,抛物线效果可以产生丰富的动态效果,例如投掷物品、跳跃等。DoTween是Unity中一个基于插值算法的补间动画库,可以轻松实现抛物线效果。 本文将详细介绍如何在Unity中使用DoTween实现抛物线效果,并提供两个示例演示。 环境准备 在使用DoTween前,需要先安装DoTween插件。可以…

    C# 2023年5月15日
    00
  • C#中this用法系列(二) 通过this修饰符为原始类型扩展方法

    关于C#中this用法系列(二) 通过this修饰符为原始类型扩展方法,这是一种 C# 的扩展方法(Extension Methods),可以为原生类型添加新的方法。本篇攻略将为您详细介绍如何使用 this 关键字来扩展原始类型的方法。 首先,在 C# 中,我们可以使用扩展方法来扩展原生类型的方法。在使用时,我们需要使用 this 关键字来指示这个方法是扩展…

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