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

embedded/2024/10/19 2:23:03/

哈喽,你好,我是雷工!
本节学习窗体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.ppmy.cn/embedded/30949.html

相关文章

第二十六章 版本管理 - GIT

文章目录 一、版本管理二、版本管理工具的常见概念三、git的安装和使用1. 安装2. 基础使用流程(本地仓库)3. 辅助命令4. 远程仓库操作5. git的分支6. 注意:7. 团队协作时分支处理8. 补充: 一、版本管理 什么是版本:一…

探索银行IT应用系统架构:构建安全高效的金融科技平台

在当今数字化时代,银行业正面临着前所未有的挑战和机遇。作为金融行业的重要组成部分,银行IT应用系统的架构设计至关重要,直接影响着银行的信息化水平、服务效率和安全性。本文将深入探讨典型银行IT应用系统的架构,为银行业构建安…

java_走迷宫(二)

前面我们已经尝试了走迷宫,遵循的是下右上左的原则。现在我们改变寻找原则 下右左上 if(map[i][j]0){//当前这个位置为0.说明可以走map[i][j]2;if (findway(map,i1,j)) {//先下return true;}else if (findway(map,i,j1)) {//右return true;}else if (findway(map,i…

EasyDarwin录像存储

目录 1、安装ffmpeg 2、建立录像存储路径 3、修改EasyDarwin配置文件 4、测试 (1)推流&#x

Vue 2 组件创建全指南:一步一步学习

文章目录 步骤 1: 创建组件文件步骤 2: 定义模板步骤 3: 添加脚本步骤 4: 添加样式步骤 5: 使用组件 步骤 1: 创建组件文件 通常,一个 Vue 组件被创建为一个单文件组件 (Single File Component),这意味着它的模板、脚本和样式都包含在一个 .vue​ 文件中…

英伟达坐山观虎斗:海力士vs三星竞争HBM

韩国媒体BusinessKorea于5月2日报道称,英伟达(NVIDIA)正策略性地激发三星电子和SK海力士之间的竞争,此举可能是为了降低高性能带宽内存(High Bandwidth Memory,简称HBM)的价格。 报道指出&…

过渡与动画

单元素/组件过渡 Vue在插入、更新或者移除 DOM 时,提供多种不同方式的过渡效果(一个淡入淡出的效果) 在条件渲染(使用v-if)、条件展示(使用v-show)、动态组件、组件根节点等情形中,可…

[华为OD] C卷 服务器cpu交换 现有两组服务器QA和B,每组有多个算力不同的CPU 100

题目: 现有两组服务器QA和B,每组有多个算力不同的CPU,其中A[i]是A组第i个CPU的运算能 力,B[i]是B组第i个CPU的运算能力。一组服务器的总算力是各CPU的算力之和。 为了让两组服务器的算力相等,允许从每组各选出一个CPU进行一次交换。 求两…