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

相关推荐
旋生万物15 分钟前
螺旋角分布的功率谱分析:多窗谱 + FDR 校正
开发语言·python
沫璃染墨26 分钟前
《从零入门Linux系统篇(五十七):线程篇·十——生产者消费者模型进阶:从环形缓冲区到POSIX信号量》
linux·运维·服务器·开发语言·c++·系统架构·信号处理
时间的拾荒人31 分钟前
Qt 窗口系统详解:从菜单栏到对话框的完整指南
开发语言·qt·面试
wuyk5551 小时前
Python 网络爬虫入门到实战 第 04 章:请求头、UA 伪装、超时、异常处理、基础反爬绕过
开发语言·爬虫·python
流形填表1 小时前
题库去重实战:基于题干指纹的重复题清理
开发语言·c#
\光辉岁月/1 小时前
3.java运算符
java·开发语言
知识分享小能手1 小时前
C++ 学习教程,从入门到精通,string类和标准模板库 — 完整知识点详解(16)
开发语言·c++·学习
qq_401700411 小时前
Qt 炫酷曲线,图表,2D/3D开源库
开发语言·qt
liangshanbo12151 小时前
面试题:线上 JavaScript 报错如何快速定位到源码?
开发语言·javascript·ecmascript
weixin_440730502 小时前
迭代器Iterator(列表生成器、可迭代的如何生成迭代器)
开发语言·python