事件 event

news2024/12/19 11:05:10

事件的使用及方法特点

事件(event)

观察1:this.btnCreateChildForm.Click += System.EventHandler(this.btnCreateChildForm_Click);

观察2:public event EventHandler Click;

观察3:public delegate void EventHandler(object sender, EventArgs e);

1. 事件的本质:事件就是对委托的进一步包装。

延时思考:买东西通常会有一个包装。(包装对实物起到保护作用)

程序优秀:(健壮性)代码规范、技术综合运用好(简化、好的技术点、扩展性...)-->不容易出问题。

2、事件

【1】在委托类型前面添加event就可以定义事件。

【2】事件必须使用+=或-=,不能直接=赋值。

【3】事件移除(也)不能使用null,只能使用-=方式。

3、事件参与者

【1】发送者(sender):也就是用来激发事件,通知所有的接受这接受消息。

private void btnSend_Click(object sender, EventArgs e)
        {
            //【5】激发事件
            EventChildReceive(this.txtSendMsg.Text);
        }

【2】接受者(Receiver):就是事件的处理者,在事件发送者触发事件后,自定执行的代码。

private void ReceiveMsg(string data)
        {
            this.txtContent.Text += data + "\r\n";
        }
namespace thinger.EventApp
{
    //【1】声明委托
    public delegate void ReceiveDelegate(string msg);

    public partial class FrmMain : Form
    {

        public FrmMain()
        {
            InitializeComponent();
        }

        //把子窗体对象放到容器中
        private List<Form> formList = new List<Form>();

       // public delegate void EventHandler(object sender, EventArgs e);
        private void btnCreateChildForm_Click(object sender, EventArgs e)
        {
            for (int i = 1; i < 4; i++) //创建3个子窗体
            {
                FrmChild frm = new FrmChild(i);
                frm.Show();
                //【4】关联委托变量和方法 
                frm.EventChildReceive += ReceiveMsg;

                //将当前窗体对象添加到集合
                formList.Add(frm);
            }
        }

        //【2】事件的接受者
        private void ReceiveMsg(string data)
        {
            this.txtContent.Text += data + "\r\n";
        }

        //移除事件
        private void btnClearEvent_Click(object sender, EventArgs e)
        {
            foreach (FrmChild item in formList)
            {
                //item.EventChildReceive = null;//这种方式不允许
                item.EventChildReceive -= ReceiveMsg;//只能通过这种方式移除事件
            }
        }
    }
}


namespace thinger.EventApp
{
    public partial class FrmChild : Form
    {
        public FrmChild(int num)
        {
            InitializeComponent();
            this.Text += $" [{num}]";
        }
        //【3】创建事件
        public event ReceiveDelegate EventChildReceive;

        private void btnSend_Click(object sender, EventArgs e)
        {
            //【5】激发事件
            EventChildReceive(this.txtSendMsg.Text);
        }
    }
}
  • 声明委托
  • 声明方法原型 接收者/订阅者
  • 创建事件 / 类似声明事件变量
  • 事件订阅方法 +=
  • 激发事件

4、事件和委托对比

第一、事件无法在“外面”赋值。比如“对象.事件=null”,会出现编译错误,而委托可以。

好处:避免用户对事件直接操作,比如Click事件,如果允许Click=null,会把底层代码清除。事件就可以起到保护作用。而委托相对“太开放”。

第二、event对象没有invoke()方法(了解)。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2262125.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

微命令 微指令 微程序 微操作

微命令是计算机控制部件通过控制线向执行部件发出的各种控制命令&#xff0c;它是构成控制序列的最小单位 微命令与微操作是一一对应的关系&#xff0c;微命令是微操作的控制信号&#xff0c;而微操作是微命令的执行过程。在机器的一个CPU周期中&#xff0c;一组实现一定操作功…

Spring 不推荐使用@Autowired

Spring 不推荐使用Autowired 原因&#xff1a;为什么 Spring和IDEA 都不推荐使用 Autowired 注解_autowired为什么不推荐-CSDN博客 解决方法&#xff1a; 使用Resource注解。 使用构造函数注入。缺点显而易见&#xff0c;当成员变量很多时&#xff0c;构造函数代码冗长&#…

6、AI测试辅助-测试报告编写(生成Bug分析柱状图)

AI测试辅助-测试报告编写&#xff08;生成Bug分析柱状图&#xff09; 一、测试报告1. 创建测试报告2. 报告补充优化2.1 Bug图表分析 3. 风险评估 总结 一、测试报告 测试报告内容应该包含&#xff1a; 1、测试结论 2、测试执行情况 3、测试bug结果分析 4、风险评估 5、改进措施…

使用re模块

一、常量 常量说明 re.M re.MULTLINE 多行模式 re.S re.DOTALL 单行模式 re.I re.IGNORECASE 忽略大小写 re.X re.VERBOSE 忽略表达式的空白字符 可以使用|开启多个选项 二、方法 2.1 编译 compile re.compile(pattern,[,falgs]) pattern是正则表达式的字符串 设定falgs&…

自动驾驶控制与规划——Project 2: 车辆横向控制

目录 零、任务介绍一、环境配置二、算法三、代码实现四、效果展示 零、任务介绍 补全src/ros-bridge/carla_shenlan_projects/carla_shenlan_stanley_pid_controller/src/stanley_controller.cpp中的TODO部分。 一、环境配置 上一次作业中没有配置docker使用gpu&#xff0c;…

FFmpeg库之ffmpeg

文章目录 ffmpeg命令行使用基本命令选择流 -map选项 主要命令视频选项音频选项多媒体格式转换滤镜裁剪加水印画中画 录制查看可用的录制设备查看录制设备选项参数录制桌面录制窗口录制摄像头录制麦克风录制系统声音同时录制桌面和麦克风 直播推流拉流 ffmpeg命令行使用 ffmpeg…

模型 信任公式(麦肯锡)

系列文章 分享 模型&#xff0c;了解更多&#x1f449; 模型_思维模型目录。信任的量化&#xff1a;可信度、可靠性、亲密度、自私度。 1 信任公式(麦肯锡)的应用 1.1 私域用户信任建立(麦肯锡信任公式的应用) 在私域营销领域&#xff0c;与用户建立牢固的信任关系对于提升用…

低延迟!实时处理!中软高科AI边缘服务器,解决边缘计算多样化需求!

根据相关统计&#xff0c;随着物联网的发展和5G技术的普及&#xff0c;到2025年&#xff0c;全球物联网设备连接数将达到1000亿&#xff0c;海量的计算数据使得传输到云端再处理的云计算方式显得更捉襟见肘。拥有低延迟、实时处理、可扩展性和更高安全性的边缘计算应运而生&…

【计算机网络2】计算机网络的性能能指标

目录 一 、计算机网络的性能指标 二、具体介绍 1、速 率 2、带 宽 3、吞 吐 量 4、时 延 5、时延带宽积 6、往 返 时 延 7、信道利用率 一 、计算机网络的性能指标 计算机网络的性能指标就是从不同方面度量计算机网络的性能&#xff0c;有如下7个指标&#xff1a; 速…

密码学——密码学概述、分类、加密技术(山东省大数据职称考试)

大数据分析应用-初级 第一部分 基础知识 一、大数据法律法规、政策文件、相关标准 二、计算机基础知识 三、信息化基础知识 四、密码学 五、大数据安全 六、数据库系统 七、数据仓库. 第二部分 专业知识 一、大数据技术与应用 二、大数据分析模型 三、数据科学 密码学 大数据…

网络攻击与防范

目录 选填 第一章 1、三种网络模式 2、几种创建网络拓扑结构 NAT模式 VPN模式 软路由模式1 软路由模式2 3、Linux网络配置常用指令 4、常见网络服务配置 DHCP DNS Web服务与FTP服务 FTP用户隔离 第二章 DNS信息收集&#xff08;dnsenum、dnsmap&#xff09; 路…

网络攻与防

1、两个专网连接 &#xff08;1&#xff09;、两个网卡VMNET2/3---配置IP子网、仅主机模式--除去DHCP设置 路由和两台主机分别ping通 &#xff08;2&#xff09;、路由配置&#xff1a;两个专网之间连接--否拨号连接 两台主机可相互ping通---成功 如果ping不通&#xff0c;…

react Ant Design

一、通过项目模版创建一个react项目 set NPM_CONFIG_REGISTRYhttps://registry.npmmirror.com pnpm create vite antd-demo cd antd-demo pnpm install pnpm install antd --save 打开项目&#xff1a; 修改&#xff1a;welcome.tsx import React from react; import { Butto…

【排序算法】——选择排序

前言 排序(Sorting) 是计算机程序设计中的一种重要操作&#xff0c;它的功能是将一个数据元素&#xff08;或记录&#xff09;的任意序列&#xff0c;重新排列成一个关键字有序的序列。所谓排序&#xff0c;就是使一串记录&#xff0c;按照其中的某个或某些关键字的大小&#x…

【排序算法】——交换排序

前言 排序(Sorting) 是计算机程序设计中的一种重要操作&#xff0c;它的功能是将一个数据元素&#xff08;或记录&#xff09;的任意序列&#xff0c;重新排列成一个关键字有序的序列。所谓排序&#xff0c;就是使一串记录&#xff0c;按照其中的某个或某些关键字的大小&#x…

硬件工程师面试题 11-20

把常见的硬件面试题进行总结&#xff0c;方便及时巩固复习。其中包括网络上的资源、大佬们的大厂面试题&#xff0c;其中可能会题目类似&#xff0c;加强印象即可。 11、示波器需要关注哪些参数&#xff1f; 1&#xff0c;示波器带宽 带宽是示波器最重要的指标之一。 模拟示波器…

【Yolov8足球追踪】YOLO格式足球检测数据集制作及目标追踪

可以只是已经制作好的数据集&#xff0c;也可以进行制作&#xff1a; 数据集制作&#xff1a;1&#xff0c;2&#xff0c;3步 数据集下载&#xff1a; https://pan.baidu.com/s/1upT_aD06lzjuz-Xjze0dcw 提取码: 6eax windows下分卷解压文件&#xff1a;https://blog.csdn.net/…

4.9 TCP 拥塞控制算法

欢迎大家订阅【计算机网络】学习专栏&#xff0c;开启你的计算机网络学习之旅&#xff01; 文章目录 1 TCP 拥塞控制算法1.1 慢开始&#xff08;Slow Start&#xff09;1.2 拥塞避免&#xff08;Congestion Avoidance&#xff09;1.3 快重传&#xff08;Fast Retransmit&#x…

计算机毕业设计Django+Tensorflow音乐推荐系统 音乐可视化 卷积神经网络CNN LSTM音乐情感分析 机器学习 深度学习 Flask

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;Java领…

【HarmonyOS】HarmonyOS 和 Flutter混合开发 (一)之鸿蒙Flutter环境安装

【HarmonyOS】HarmonyOS 和 Flutter混合开发 &#xff08;一&#xff09;之鸿蒙Flutter环境安装 一、前言 flutter作为开源适配框架方案&#xff0c;已经在Android&#xff0c;IOS&#xff0c;Web&#xff0c;Window四大平台进行了适配&#xff0c;一套代码&#xff0c;可以同…