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

相关推荐
测试界的酸菜鱼1 分钟前
Python 大数据展示屏实例
大数据·开发语言·python
晨曦_子画11 分钟前
编程语言之战:AI 之后的 Kotlin 与 Java
android·java·开发语言·人工智能·kotlin
Black_Friend19 分钟前
关于在VS中使用Qt不同版本报错的问题
开发语言·qt
希言JY43 分钟前
C字符串 | 字符串处理函数 | 使用 | 原理 | 实现
c语言·开发语言
残月只会敲键盘43 分钟前
php代码审计--常见函数整理
开发语言·php
xianwu54343 分钟前
反向代理模块
linux·开发语言·网络·git
ktkiko111 小时前
Java中的远程方法调用——RPC详解
java·开发语言·rpc
y5236481 小时前
Javascript监控元素样式变化
开发语言·javascript·ecmascript
IT技术分享社区2 小时前
C#实战:使用腾讯云识别服务轻松提取火车票信息
开发语言·c#·云计算·腾讯云·共识算法
极客代码2 小时前
【Python TensorFlow】入门到精通
开发语言·人工智能·python·深度学习·tensorflow