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#实现聊天消息渲染与图文混排详解

    C#实现聊天消息渲染与图文混排详解 在 C# 中,我们可以使用 WinForms 或 WPF 来实现聊天消息渲染和图文混排。本攻略将介绍如何使用 WinForms 或 WPF 实现聊天消息渲染和图文混排,并提供两个示例说明。 WinForms 实现 步骤1:创建 WinForms 应用程序 首先,我们需要创建一个 WinForms 应用程序。可以使用 Vis…

    C# 2023年5月17日
    00
  • c#在控制台输出彩色文字的方法

    下面我将详细讲解如何在C#控制台输出彩色文字。 1. 使用系统默认颜色 在C#控制台中,可以使用控制台对象Console的静态方法来输出彩色文字。首先让我们来看一下使用系统默认颜色的方法。 使用Console.ForegroundColor属性设置前景色,即文字颜色,使用Console.BackgroundColor属性设置背景色,然后使用Console.W…

    C# 2023年6月7日
    00
  • c#获取字符串宽度的示例代码(字节数方法)

    下面我将详细讲解如何通过c#获取字符串宽度的示例代码。首先,我们要明确一下字符宽度的概念。由于不同的字符在显示上会占用不同的宽度,因此需要通过特定的算法来计算字符的宽度。在下面的攻略中,我们将介绍使用字节数方法来获取字符串宽度。 步骤一:定义计算宽度的方法 在c#中,我们可以使用Encoding类来进行字节转换,然后根据指定编码的字节数,得出字符串的宽度。下…

    C# 2023年6月8日
    00
  • asp.net 关于==?:和if()else()条件判断等效例子

    ASP.NET 是一种基于 .NET Framework 的 Web 应用程序开发框架,它支持 C#、VB.NET、JScript.NET 和其他高级编程语言。在 ASP.NET 中,我们经常会用到条件判断语句,其中 “==?:” 是常用的一个运算符,而if…else…则是最常见的条件判断语句之一。 1. “==?:”运算符 “==?:” 意思是在判…

    C# 2023年5月31日
    00
  • C#微信公众平台开发之access_token的获取存储与更新

    C#微信公众平台开发之access_token的获取存储与更新 前言 微信公众平台开发中,access_token是关键的全局唯一接口调用凭据,获取access_token是进行后续接口调用的必要步骤。因为获取access_token每日调用次数有限,并且获取access_token的过程中存在一些约束和具体的有效期,所以需要进行存储和更新。 本文将详细介绍…

    C# 2023年5月31日
    00
  • Vue Router中应用中间件的方法

    Vue Router中应用中间件的方法可以帮助我们在路由导航过程中执行一些操作,例如验证用户身份、记录日志、处理错误等。在本文中,我们将介绍Vue Router中应用中间件的方法,并提供两个示例说明。 Vue Router中应用中间件的方法 Vue Router中应用中间件的方法是通过beforeEach和afterEach方法来实现的。这两个方法都接受一个…

    C# 2023年5月17日
    00
  • 详解ASP.NET Core中间件Middleware

    详解ASP.NET Core中间件Middleware攻略 ASP.NET Core中间件Middleware是一种用于处理HTTP请求和响应的组件。在本攻略中,我们将深入探讨ASP.NET Core中间件Middleware的工作原理,并提供两个示例说明。 中间件Middleware的工作原理 在ASP.NET Core中,中间件Middleware是一种…

    C# 2023年5月17日
    00
  • asp.net(c#)有关 Session 操作的几个误区

    下面是关于 ASP.NET(C#) 中 Session 操作的几个误区的详细讲解: 误区一:Session数据的不安全性 很多人认为 Session 的数据是存在 Web 服务器的内存中,并且只有用户可以访问它们,因此 Session 数据非常安全。然而,这是不准确的。攻击者可以通过多种方式访问这些 Session 数据,从而影响应用程序的可靠性和安全性。 …

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