c#对object sender ,EventArgs e 的解释

鼠标点击事件解析:

当我们生成一个button点击按钮时间的时候,会有这样的一个方法。

其中两个参数 object sender,EventArgs e

private void btnStart_Click(object sender, EventArgs e)

{

}

当你双击界面上的"停止"按钮时,Visual Studio 会自动为你生成这个方法。括号里的 object senderEventArgs e 是 C# 中所有"事件"(比如点击按钮、移动鼠标、接收设备数据)的标准标配。

为了秒懂,我们把**"触发点击事件"想象成"寄快递"**的过程:

1. object sender ------ 快递的"寄件人"

  • 字面意思: sender 的英文原意就是"发送者"。它负责告诉后台代码:"刚刚到底是谁(哪一个界面的控件)触发了这个动作?"

  • 为什么是 object 类型? 在 C# 中,object 就像是一个"百搭的超级大纸箱"。因为不仅"停止按钮"可以被点击,界面的"文本框"、"图片"甚至"整个窗体"都可以触发事件。为了通用,C# 就统一用 object 这个大纸箱把触发事件的控件装起来,然后传给这个方法。

  • 在上位机里怎么用? 目前在这个方法里,电脑只知道 sender 是个"百搭纸箱"。如果你想在代码里修改这个按钮的颜色或文字,你需要结合咱们之前学过的**"强制转换"**(把大盒子拆开看里面的真面目):

Button clickedBtn = (Button)sender; // 确认寄件人真的是个按钮,强转一下

clickedBtn.Text = "已停止"; // 把被点击的按钮文字改掉

2. EventArgs e ------ 快递里的"附件信息"

  • 字面意思: Event 代表事件,Args 是参数(Arguments 的缩写)。它里面装着**"事件发生时产生的额外详细数据"**。

  • 简单的事件(空包裹): 像你这里普通的"鼠标点击(Click)",动作很简单,不需要什么额外信息。所以传过来的 EventArgs e 基本上就是一个"空包裹",咱们在写代码时一般也不去管它。

  • 复杂的事件(装满数据的包裹): 但如果你写的是"鼠标移动(MouseMove)"事件,传过来的就会是特定升级版的包裹(叫 MouseEventArgs)。这时候的 e 里面就大有乾坤了!你可以通过读取 e.Xe.Y,精准地拿到鼠标当前在屏幕上的坐标。又比如在"键盘按下"事件里,e 会告诉你用户刚才敲了哪个字母。

鼠标移动事件解析:

实例:创建一个主窗体鼠标移动的事件,

private void FormMain_MouseMove(object sender, MouseEventArgs e)

{

}

1. sender 是"感受到动作的控件"

  • 在 C# 的事件逻辑里,sender 永远是指**"谁身上发生了这个事件(谁被操作了)"**。

  • 在这个例子中,是"主窗体"感受到了鼠标在自己的地盘上滑过。于是,主窗体(FormMain)大喊了一声:"报告!有东西在我身上移动!"并把这封信寄给了后台。

  • 所以,这里的 sender 就是主窗体自己。如果你想要在鼠标移动时顺便改变一下窗体的背景颜色,你可以把 sender 强转成窗体来操作(比如:Form myForm = (Form)sender;)。

2. 那"鼠标"的信息究竟藏在哪里呢?在 e 里面!

  • 还记得我们之前说的 EventArgs e 是快递里的**"附件信息"**吗?

  • 在这个专门针对鼠标的事件里,普通的小包裹升级成了高级专属包裹:MouseEventArgs e

  • 关于鼠标的所有细节,统统都在这个 e 里! 系统通过 e 把鼠标的当前状态当作附件参数传给了你。

你在代码里敲下 e.(加个点),Visual Studio 的智能提示就会弹出一系列关于鼠标的详细信息,比如:

  • e.Xe.Y:这是上位机中最常用的,代表鼠标当前在窗体上的精确坐标位置。

  • e.Button:它会告诉你现在鼠标移动的时候,用户有没有按着鼠标左键或者右键。

再一次解释:

  • sender(寄件人) = 窗体本身。 它代表的是"谁"触发了这个事件,是一个实实在在的控件对象

  • e(包裹里的信件) = 事件的数据包。 它纯粹是一张系统自动生成的**"情报单"或者"体检报告"**,里面只装数据,不代表任何物理控件。

让我们把时间放慢,看看鼠标滑动的那一瞬间发生了什么:

  1. 鼠标在主窗体上滑了一下。

  2. **主窗体(FormMain)**感觉到了,它立刻充当了寄件人(这就是 sender)。

  3. 与此同时,聪明的 Windows 操作系统在幕后迅速用笔写了一张字条,上面记录着:"当前位置 X=150,Y=200,没有按键"。系统把这张字条装进了一个名叫 MouseEventArgs 的专用信封里(这就是 e)。

  4. 最后,系统把寄件人(sender)和信封(e)一起交给了你的 FormMain_MouseMove 方法。

this.btnStart.Click += new System.EventHandler(this.btnStart_Click);

btStart.Click的事件

构造方法是在窗体类创建对象的时候调用的方法(创建过程中)

相关推荐
绿豆人1 小时前
go语言的Reflect包
java·开发语言·数据结构
Eiceblue1 小时前
C# 删除 PDF 页面:单页 / 多页批量删除技巧
前端·pdf·c#
lolo大魔王1 小时前
Go语言的函数与指针的定义
开发语言·后端·golang
liuyao_xianhui2 小时前
map和set_C++
java·开发语言·数据结构·c++·算法·宽度优先
香蕉鼠片2 小时前
八股C++
开发语言·c++
AI视觉网奇2 小时前
python 截取矩形 缩放,旋转
开发语言·python·numpy
Yyyyy123jsjs2 小时前
轻松通过Python调用外汇api获取汇率数据
开发语言·python
墨^O^2 小时前
C++ Memory Order 完全指南:从 relaxed 到 seq_cst,深入理解无锁编程与 happens-before
linux·开发语言·c++·笔记·学习·算法·缓存
阿正的梦工坊2 小时前
JavaScript 闭包:从入门到精通
开发语言·javascript·ecmascript