C#知识|事件集中响应,多个按钮关联同一事件(实例练习)

哈喽,你好,我是雷工!
本节学习窗体Controls集合、控件事件的统一关联及如何优化重复代码。

01 事件集中响应

原理:就是相同的控件,可以关联同一个事件响应方法。

02 示例演示

2.1、示例功能

该示例实现窗体中选择喜欢的账号,然后弹出该账号的编号和文章数量,即对应按钮的Tag属性对应的字符串;

2.2、效果演示

在这里插入图片描述

2.3、实现步骤

2.3.1、创建窗体

首先创建窗体,在窗体上布局所需的控件,将按钮的Text属性改成对应的账号名称;
可以根据喜好修改文本和背景的颜色样式。
也可以添加效果,比如当鼠标移入时显示一种颜色,点击时显示一种颜色;

在这里插入图片描述

2.3.2、修改添加按钮的名称

在这里插入图片描述

2.3.3、修改Tag属性

Tag属性可以用来存储数据,该示例将每个账号按钮对应的编号和文章数量存储在Tag属性中;
实际项目中获取到对应数据后可以再做相应处理,此示例仅显示出来;

在这里插入图片描述

2.3.4、事件集中处理方法
代码:

//事件集中处理方法
private void btn_Click(object sender, EventArgs e)
{Button btn = sender as Button;MessageBox.Show(btn.Tag.ToString());//显示按钮Tag属性对应的字符串
}

2.3.5、事件关联
多个按钮响应同一个事件,需要通过如下代码实现事件关联;
事件关联写法1:

//多个按钮响应同一个事件,在此做事件关联(写法1)-
this.btn001.Click += new System.EventHandler(this.btn_Click);
this.btn002.Click += new System.EventHandler(this.btn_Click);
this.btn003.Click += new System.EventHandler(this.btn_Click);
this.btn004.Click += new System.EventHandler(this.btn_Click);
this.btn005.Click += new System.EventHandler(this.btn_Click);
this.btn006.Click += new System.EventHandler(this.btn_Click);
this.btn007.Click += new System.EventHandler(this.btn_Click);
this.btn008.Click += new System.EventHandler(this.btn_Click);
this.btn009.Click += new System.EventHandler(this.btn_Click);
this.btn010.Click += new System.EventHandler(this.btn_Click);
this.btn011.Click += new System.EventHandler(this.btn_Click);
this.btn012.Click += new System.EventHandler(this.btn_Click);

如上写法1比较容易理解,即将每个按钮都关联2.3.4所示的时间集中处理方法;
该写法虽然也能实现要实现的效果,但是较重复,本例为12个按钮关联同一事件,实际开发中如果遇到几十上百个按钮关联同一事件的话,按上方写法就比较麻烦了,所以可以通过如下写法优化写法1的代码:

事件关联写法2:

//多个按钮响应同一个事件,在此做事件关联(写法2)
foreach (Control item in this.Controls)
{if(item is Button){Button btn = item as Button;if(btn.Tag.ToString()!="save")//过滤保存按钮;{btn.Click += new System.EventHandler(this.btn_Click);}}
}

写法2相比写法1明显高级很多,当一个窗体有上百个按钮时,也不用修改代码,不仅看起来简洁,维护起来也比较方便。

2.4、后记

以上为学习事件集中使用方法的一个小的练习示例,有同样在学习C#的小伙伴也可以尝试下。

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

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

相关文章

嵌入式硬件中优化设计PCB提高焊接质量方法

随着电子技术的飞速发展,电子元器件的小型化、微型化、间距为0.3mm~0.5mm高密度的芯片越来越普遍,对电子焊接技术的要求也就越来越高。虽然现在有了更精密的贴片机可以代替人工焊接,但影响焊接质量的因素太多。本文将从贴片焊接的角度,介绍了几点PCB设计时需要注意的要点,…

基于php+mysql+html简单图书管理系统

博主介绍: 大家好,本人精通Java、Python、Php、C#、C、C编程语言,同时也熟练掌握微信小程序、Android等技术,能够为大家提供全方位的技术支持和交流。 我有丰富的成品Java、Python、C#毕设项目经验,能够为学生提供各类…

Springboot图片上传【本地+oss】

文章目录 1 前端组件页面2 本地上传3 上传到阿里云oss3.1申请开通账号&#xff0c;做好先导准备3.2 开始使用 1 前端组件页面 使用的VueElement组件 在线cdn引入&#xff1a; <script src"https://cdn.bootcdn.net/ajax/libs/vue/2.7.16/vue.js"></script&…

ubuntu开启zram彻底解决高I/O引起的卡顿,复制文件无比流畅

环境: Ubuntu 22.04.3 LTS ZRAM 的原理是&#xff1a; 将一块内存区域作为虚拟的块设备,压缩页面交换数据,存储在内存中,释放物理内存空间可用的物理内存就能随之变多 开启/加载 zRAM 模块 sudo modprobe zram num_devices1 lsmod | grep zram安装zram-config sudo apt in…

Typescript语法

常量声明 let用于声明变量&#xff0c;而const用于声明常量。两者的区别是变量在赋值后可以修改&#xff0c;而常量在赋值后便不能修改。 const b:number 200; 类型判断 如果一个变量或常量的声明包含了初始值&#xff0c;TS便可以根据初始值进行类型判断&#xff0c;此时…

IP协议的TTL解析(定义、执行、用途)

基本定义 ttl定义的目的是为了让数据包能不要在网上存活太久。为什么呢&#xff1f;最初的原因&#xff1a; 如果出现了路由环路会怎样&#xff1f; 其实也简单&#xff1a; 一个包会在网络里一直转来转去&#xff0c;永远不会被丢弃。网络里会慢慢堆积起垃圾&#xff0c;不断…

python的函数和内置数据类型

python中文注释方法 在pvthon编写代码的时候&#xff0c;避免不了会出现或是用到中文&#xff0c;这时候你需要在文件开头加上中文注释。如果开头不声明保存编码的格式是什么&#xff0c;那么它会默认使用ASKII码保存文件&#xff0c;这时如果你的代码中有中文就会出错了&#…

有限元分析

TOC在这里插入代码片 **应力挤压时的横截面内部力 剪应力&#xff1a;应力的相反力 法向力&#xff1a;施加的压力 与应力垂直 你好&#xff01; 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章&#xff0c;了解…

STM32入门学习之DMA

1.直接存储访问DMA(Direct Memory Access)&#xff1a;DMA传输不需要CPU的参与&#xff0c;直接在内存和I/O设备间开辟了一条新的数据传输通道&#xff0c;不仅提高数据传输的速率&#xff0c;还因为不需要CPU的干预&#xff0c;从而提高了CPU的利用率。(注&#xff1a;文中的资…

小红书API接口封装 | 根据笔记链接采集笔记详情,含正文内容、发布时间、转评赞藏等

一、背景介绍 1.1 爬取目标 用python开发的爬虫采集软件&#xff0c;可自动按笔记链接抓取笔记的详情数据。 为什么有了源码还开发界面软件呢&#xff1f;方便不懂编程代码的小白用户使用&#xff0c;无需安装python&#xff0c;无需改代码&#xff0c;双击打开即用&#xf…

零基础学习数据库SQL语句之操作表中数据的DML语句

我们的数据库是根据页面原型和相关需求完成相关开发的 在表中添加数据 删除数据 修改数据 添加数据 页面模型 当点击保存的时候就能将表单数据提交到服务端 服务端将数据添加到数据库 我们要用insert语句 将数据添加到数据库中 代码演示 CREATE DATABASE Dduo; USE Dduo…

在2-3-4树上实现连接与分裂操作的算法与实现

在2-3-4树上实现连接与分裂操作的算法与实现 引言1. 维护2-3-4树结点的高度属性伪代码示例 2. 实现连接操作伪代码示例 3. 证明简单路径p的划分性质4. 实现分裂操作伪代码示例 C代码示例结论 引言 2-3-4树是一种平衡搜索树&#xff0c;它保证了树的高度被有效控制&#xff0c;…

git学习指南

文章目录 一.版本控制1.认识版本控制2.版本控制功能3.集中式版本控制4.分布式版本控制 二.Git的环境安装搭建1.Git的安装2.Git配置分类3.Git配置选项 三.Git初始化本地仓库1. git init/git clone-获取Git仓库2. 本地仓库文件的划分3. git status-检测文件的状态4. git add-文件…

Electron使用 SQLite

在客户端开发中&#xff0c;无论是 PC 端&#xff0c;还是手机端&#xff0c;为了能够访问离线数据&#xff0c;数据经常需要保存到本地&#xff0c;IndexDB 可以用于存储本地数据&#xff0c;IndexDB 是一个对象存储&#xff0c;数据是以 key:value 的形式进行存储和访问的&am…

【Redis面试题】Redis常见的一些高频面试题

分享几个Redis入门级常见面试过程中遇到的题目! 你项目中哪里使用到了redis?可以讲一讲嘛 这个题目无论是大公司还是小公司都经常考,建议大家根据自己的项目做总结 redis的几种基础数据结构 redis为什么那么快&#xff1f; 1.基于内存实现&#xff1a;我们都知道内存读写是…

【neteq】tgcall的调用、neteq的创建及接收侧统计

G:\CDN\P2P-DEV\Libraries\tg_owt\src\call\call.cc基本是按照原生webrtc的来的:G:\CDN\P2P-DEV\tdesktop-offical\Telegram\ThirdParty\tgcalls\tgcalls\group\GroupInstanceCustomImpl.cpptg对neteq的使用 worker 线程创建call Call的config需要neteqfactory Call::CreateAu…

STM32单片机实战开发笔记-EXIT外部中断检测

嵌入式单片机开发实战例程合集&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/11av8rV45dtHO0EHf8e_Q0Q?pwd28ab 提取码&#xff1a;28ab EXIT模块测试 功能描述 外部中断/事件控制器由19个产生事件/中断要求的边沿检测器组成。每个输入线可以独立地配置输入类型&a…

【C++】学习笔记——string_5

文章目录 六、string类7. string类的模拟实现8. string类的模拟实现的完整代码string.h头文件test.c源文件 9. string收尾写时拷贝 未完待续 六、string类 7. string类的模拟实现 我们之前讲了实现 insert &#xff0c;但是那个插入函数仅仅是在 pos 位置插入一个字符而且&am…

二、nodejs连接数据库实现登录功能

// 数据库下载可以用这个 DBeaver安装与使用教程&#xff08;超详细安装与使用教程&#xff09;&#xff0c;好用免费的数据库管理工具_dbeaver使用教程-CSDN博客 模块化 &#xff08;1&#xff09;新建一个叫Dao的文件夹&#xff0c;存接数据库代码 // 参考数据库 &#xf…

自动驾驶-第02课软件环境基础(ROSCMake)

1. 什么是ros 2. 为什么使用ros 3. ROS通信 3.1 Catkin编译系统