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 参数实现参数的传递

相关推荐
布莱克60532 分钟前
C/C++ 中变量的声明与定义:区别、联系与常见误区
c语言·开发语言·c++·声明·定义
LabVIEW开发41 分钟前
LabVIEW 局部变量为何引发竞争条件?四种同步机制
开发语言·labview
benchmark_cc1 小时前
A 股、港股、美股如何建立统一的标的主数据格式?
开发语言·python·数据分析·pandas·量化交易·股票数据·quantdash
Zenova EdgeOS3 小时前
Go 工业边缘错误处理实战:用 errors 构建可追溯错误链
开发语言·数据库·golang
取名真是3 小时前
Python 算法知识点从基础到进阶
开发语言·python·算法
FRing033 小时前
vue2干货总结3(computed计算属性、watch监听器)
开发语言·前端·vue.js·vue2
Fatbobman(东坡肘子)4 小时前
快速消失的硬盘容量 -- 肘子的 Swift 周报 #160
开发语言·人工智能·redis·ios·swiftui·iphone·swift
揽星河..4 小时前
【C语言】底层程序设计
c语言·开发语言
JavaPub-rodert4 小时前
从零搭建通用管理后台:ShiyuAdmin 的 Go、React 与 RBAC 实践
开发语言·react.js·golang
海的透彻5 小时前
dockerfile如何快速构建容器(java服务)
java·开发语言