C# winfrom 如何多窗体优雅的回调方法

1.首先你需要 两个窗体 可以叫做 A和B窗体。现在呢从A窗体弹出B窗体 然后B窗体返回值到A窗体如何优雅的完成呢?

解决方式:

可以试试委托

第一步在B窗体定义委托方法

cs 复制代码
 public delegate void ValueChangedHandler(object sender, EventArgs<List<DataGridViewRow>> e);
  public event ValueChangedHandler ValueChanged;

然后第二步在你需要回传的时候执行

cs 复制代码
 ValueChanged(this, new EventArgs<List<DataGridViewRow>>(listMoDId));

备注:listMoDId 就是List<DataGridViewRow>

第三步A窗体接收创建一个方法

cs 复制代码
  private void BulletFrame_ValueChanged(object sender, BulletFrame.EventArgs<List<DataGridViewRow>> e)
        {
//e.Value 就是传过来的值


}

第四步 A窗体的BulletFrame_ValueChanged方法要绑定到B窗体上面

cs 复制代码
            B frm = new B();
            frm.ValueChanged += BulletFrame_ValueChanged;
            frm.ShowDialog();

来讲点理论吧:

在C#中,delegateevent 是两个非常有用的关键字,它们经常一起使用来在类之间传递消息或通知

delegate(委托)

委托就好像一个银行可以接收多个方法来源 ValueChangedHandler 是一个委托类型,它定义了一个方法签名,该方法没有返回值(void),接受两个参数:

object sender:通常用于传递触发事件的对象。这是一个常见的模式,允许事件处理程序知道是哪个对象触发了事件(作用于A和B建立绑定之后有一个唯一的标识可以精准指定是谁和我建立了绑定)

EventArgs<List<DataGridViewRow>> e:这是一个泛型参数,假设 EventArgs<T> 是一个自定义的或来自某个库的泛型类,它继承自 EventArgs 类。这个参数用于传递与事件相关的数据,当然你可在里面写任意的类返回

Event(事件)

接下来,event 关键字用于在类中声明一个事件。事件是基于委托的,它允许类或对象提供通知。在例子中,ValueChanged 是一个事件,它的类型是之前声明的 ValueChangedHandler 委托。这意味着任何订阅了 ValueChanged 事件的方法都必须符合 ValueChangedHandler 委托的签名。

怎么使用订阅事件呢?

当其他类(或同一个类中的其他方法)想要知道 ValueChanged 事件何时发生时,它们可以订阅该事件。订阅事件通常是通过将符合委托签名的方法作为参数传递给 += 操作符来完成的

cs 复制代码
 frm.ValueChanged += BulletFrame_ValueChanged;

总结

通过这种方式,delegateevent 提供了一种灵活且类型安全的方式来在C#中的类之间传递消息和通知。它们是实现事件驱动编程模式的关键组件。

相关推荐
阿珊和她的猫3 小时前
v-scale-scree: 根据屏幕尺寸缩放内容
开发语言·前端·javascript
fouryears_234176 小时前
Flutter InheritedWidget 详解:从生命周期到数据流动的完整解析
开发语言·flutter·客户端·dart
我好喜欢你~6 小时前
C#---StopWatch类
开发语言·c#
lifallen7 小时前
Java Stream sort算子实现:SortedOps
java·开发语言
IT毕设实战小研7 小时前
基于Spring Boot 4s店车辆管理系统 租车管理系统 停车位管理系统 智慧车辆管理系统
java·开发语言·spring boot·后端·spring·毕业设计·课程设计
cui__OaO9 小时前
Linux软件编程--线程
linux·开发语言·线程·互斥锁·死锁·信号量·嵌入式学习
鱼鱼说测试9 小时前
Jenkins+Python自动化持续集成详细教程
开发语言·servlet·php
艾莉丝努力练剑10 小时前
【洛谷刷题】用C语言和C++做一些入门题,练习洛谷IDE模式:分支机构(一)
c语言·开发语言·数据结构·c++·学习·算法
一阵没来由的风10 小时前
拒绝造轮子(C#篇)ZLG CAN卡驱动封装应用
c#·can·封装·zlg·基础封装·轮子
CHEN5_0210 小时前
【Java基础面试题】Java基础概念
java·开发语言