C#中如何定义带参数的EventHandler?

news/2024/9/23 9:04:00/

简述

        事件调用的所有方法都需要两个参数:object sender,EventArgs e。事件使用这两个参数调用方法,因此我们不能直接添加自定义参数。

        比如下面这段代码,我们想在 MessageBox 中显示字符串 ' s ',这必然是不成。

private void Form1_Load (object sender, EventArgs e)
{string s = "Hello!";button.Click += new EventHandler(show_msg);
}private void show_msg(object sender, EventArgs e, string s) 
{MessageBox.Show(s);
}

        你肯定要问,我为什么一定要传参数,我定义全局的不成么?当然可以,但是假如你这个事件关联到全局的字典,在事件里面要区分是谁调用,那就有用了。

        你可能还要问,那我再sender里面定义一些参数不就成了么?确实也可以,但是假如是跨进程呢,事件是由其它进程触发,我们无法挂载任何多余信息,而且进程状态不可控,并且关联到我们系统内的id,那么就需要再事件里面找到id,根据什么找呢?

        所以更好的方法就是在绑定事件的时候,就把自定义的参数传入。

        最简单的解决方案肯定是使用委托来调用我们的方法。

使用lambda 运算符

        代码清晰,简单方便

private void Form1_Load (object sender, EventArgs e)
{string s = "Hello!";button.Click += (sender2, e2) => show_msg(sender2, e2, s);
}private void show_msg (object sender, EventArgs e, string s)
{MessageBox.Show(s);
}

使用委托重写

private void Form1_Load (object sender, EventArgs e)
{string s = "Hello!";button.Click += delegate(object sender2, EventArgs e2){show_msg(sender2, e2, s);};
}private void show_msg(object sender, EventArgs e, string s)
{MessageBox.Show(s);
} 


http://www.ppmy.cn/news/1446294.html

相关文章

赶紧收藏!2024 年最常见 100道 Java 基础面试题(十九)

上一篇地址:赶紧收藏!2024 年最常见 100道 Java 基础面试题(十八)-CSDN博客 三十七、守护线程是什么? 守护线程(Daemon Thread)是Java中的一种特殊类型的线程,它的目的是为其他线程…

用过最佳的wordpress模板

西瓜红,作为一种充满活力和激情的颜色,总是能给人留下深刻的印象。当这种鲜艳的色彩与经典的设计元素相结合时,就能打造出一款既时尚又实用的WordPress企业模板。今天,我们向您隆重推荐这款西瓜红经典配色WordPress企业模板。 这…

ubuntu搭建jupyter_notebook服务器

环境:ubuntu 22.04 目录 环境:ubuntu 22.04 一、创建一个anaconda用户 创建用户condaUser 为用户condaUser设置密码 开放opt文件夹的权限 登录condaUser用户 二、安装anaconda 下载anaconda 安装anaconda 三、添加环境变量 四、anaconda换源 …

分布式与一致性协议之Paxos算法(二)

Paxos算法 如何达成共识 想象这样一个场景,某地出现突发事件,当地村委会、负责人等在积极研究和搜集解决该事件的解决方案,你也决定参与其中,提交提案,建议一些解决方法。为了和其他村民的提案做区分,你的…

李沐65_注意力分数——自学笔记

Additive Attention 等价于将key和value合并起来后放入到一个隐藏大小为h输出大小为1的单隐藏层 总结 1.注意力分数是query和key的相似度,注意力权重是分数的softmax结果 2.两种常见的分数计算: (1)将query和key合并起来进入一个单输出单…

利用AnaTraf网络流量分析仪提升网络质量与分析网络性能

随着技术的不断进步,网络技术在企业运营中扮演着越来越重要的角色。网络故障和性能问题一旦出现,不仅会严重影响企业的生产和服务,也会造成大量经济损失。因此,拥有一款优秀的网络流量分析工具显得尤为重要。 AnaTraf网络流量分析仪正是一款针对这一需求而开发的高…

太速科技-基于XC7Z100+灵汐KA200的图像处理类脑平台

基于XC7Z100灵汐KA200的图像处理类脑平台 一、产品概述 DF300 是一款小型化高性能的 AI 测试套件。DF300 集成了灵汐 AI 类脑计算芯片和可 扩展算法硬件引擎,具备小型化、低功耗、高算力、高密度、接口丰富和硬件算法可 高度定制等特点,可以实现图像、视…

ceph笔记 2

一、CephX 认证机制: 看这里 和这里 好好看看这个和官网的,Cephadm安装Ceph(v17.2.5 Quincy) 51CTO,rgw也好好看看 1、mon负责认证,mon一定要三个,要不一个坏了以后还咋认证 2、认证完才能对ceph增删改查 3、 在 Cep…