C# Windows EventHandler事件的使用

在实现项目中有这样一个使用场景,在一个独立的类库中,它没有对其他类库的引用。所以它能调用的资源有限。这时想在这个类库的一个窗体中的一个按钮要实现一个功能时就会发现有很多要调用的资源没有,无法实现业务逻辑。这时怎么办?

方法1:添加其他要引用的类库,实现功能。这个方法要看项目结构了。有些项目结由于以前的各种原因,无法让这个类库引用其他类库,如果加了引用会出现因引用带来的报错。这时这个方法就无法使用了,还一个原因是你的上级设计了这样一个项目结构他不希望你在破坏这个结构的情况下实现功能。这时就要用到方法2了。

方法2:使用EventHandler事件,将按钮的点击事件以事件的方法发出,让可以调用其他资源的窗口去绑定这个事件从而实现功能逻辑。

本方介绍一个通过中间人实现事件传递的实例。

1.将事件定义在【中间人】窗口中。

复制代码
/// <summary>
        /// 功率测试 事件
        /// </summary>
        public event EventHandler PowerTestHandler;

现实现一个调用方法

复制代码
/// <summary>
        /// 激光功率数据读取
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        public void PowerRead(object sender, EventArgs e)
        {
            if (PowerReadHandler != null)
                PowerReadHandler(sender, e);
        }

2.在事件发出窗口增加一个关联方法

复制代码
/// <summary>
        /// 激光打标功率测试
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        public void HandlerPowerTest(object sender, EventArgs e)
        {
            GtnParamParentForm parentForm = (GtnParamParentForm)this.Owner;
            if (parentForm == null)
            {
                return;
            }
            parentForm.PowerTest(sender, e);
        }

按钮调用关联方法实现事件的发出

复制代码
/// <summary>
        /// 激光器功率测试 按键
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnPowerTest_Click(object sender, EventArgs e)
        {
            HandlerPowerTest(m_nPlateIndex, e);
        }

3.主窗口注册事件,并实现功能逻辑。

parametersParentForm 对象是GtnParamParentForm 中间人窗口对象的实例。

ParametersParentForm_PowerTestHandler方法是实现逻辑的,如果要参数可以通过object sender 参数实现参数的传递

相关推荐
孙启超7 分钟前
【AI开发之Rust】第 17 课:项目总览与核心架构 —— AI 助手 Rust 核心从 0 到 1
开发语言·后端·rust
码匠许师傅31 分钟前
【C++三方组件】Asio 上篇:回调式 TCP 客户端与服务端
开发语言·c++·tcp/ip
神仙别闹37 分钟前
基于C语言实现 TINY+ 编译器
c语言·开发语言·数据库
mudtools40 分钟前
在.NET现有系统中快速集成飞书任务分配能力
后端·c#·.net
Wang's Blog41 分钟前
Java 项目实战: 外卖平台优化-从库Slave配置与主从复制验证
java·开发语言
知识分享小能手1 小时前
C++ 学习教程,从入门到精通,C++内存模型和名称空间 — 详细知识点总结(9)
开发语言·c++·学习
2601_962218611 小时前
c++中多重继承与虚继承的实现
开发语言·c++
我是小白呀1 小时前
17-企业Workflow引擎怎么选:定时、队列、n8n、Temporal与Camunda
java·开发语言·人工智能·dubbo·workflow
维克兜率天2 小时前
【维克】均值回归:跌多了会涨,涨多了会跌
开发语言·笔记·python·算法·均值算法·回归·量化
实心儿儿2 小时前
Qt — Qt 窗口
开发语言·qt