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的事件

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

相关推荐
雨落倾城夏未凉5 天前
第四章c#方法-参数数组和可选参数(16)
后端·c#
唐青枫6 天前
线程不是越多越快:C#.NET Thread 生命周期、同步与后台工作线程实战
c#·.net
唐青枫7 天前
别只会反射:C#.NET Emit 动态生成代码实战详解
c#·.net
咕白m6257 天前
.NET 环境下 Word 超链接批量提取方案
c#·.net
用户91721561902117 天前
C# 通信协议增量解析:用状态机处理半包和粘包
c#
小码编匠8 天前
C# 工控上位机必备:数据转换工具类与十个核心模块
后端·c#·.net
唐青枫10 天前
别再乱用 StartNew:C#.NET TaskFactory 任务调度实战详解
c#·.net
Artech10 天前
[MAF预定义的AIContextProvider-03]ChatHistoryMemoryProvider——赋予Agent从经验中学习的能力
ai·c#·agent·memory·maf
Scout-leaf12 天前
C#摸鱼实录——IoC与DI案例详解
c#
咕白m62512 天前
使用 C# 在 Excel 中应用多种字体样式
后端·c#