鼠标点击事件解析:
当我们生成一个button点击按钮时间的时候,会有这样的一个方法。
其中两个参数 object sender,EventArgs e
private void btnStart_Click(object sender, EventArgs e)
{
}
当你双击界面上的"停止"按钮时,Visual Studio 会自动为你生成这个方法。括号里的 object sender 和 EventArgs 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.X和e.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.X和e.Y:这是上位机中最常用的,代表鼠标当前在窗体上的精确坐标位置。 -
e.Button:它会告诉你现在鼠标移动的时候,用户有没有按着鼠标左键或者右键。
再一次解释:
-
sender(寄件人) = 窗体本身。 它代表的是"谁"触发了这个事件,是一个实实在在的控件对象。 -
e(包裹里的信件) = 事件的数据包。 它纯粹是一张系统自动生成的**"情报单"或者"体检报告"**,里面只装数据,不代表任何物理控件。
让我们把时间放慢,看看鼠标滑动的那一瞬间发生了什么:
-
鼠标在主窗体上滑了一下。
-
**主窗体(FormMain)**感觉到了,它立刻充当了寄件人(这就是
sender)。 -
与此同时,聪明的 Windows 操作系统在幕后迅速用笔写了一张字条,上面记录着:"当前位置 X=150,Y=200,没有按键"。系统把这张字条装进了一个名叫
MouseEventArgs的专用信封里(这就是e)。 -
最后,系统把寄件人(
sender)和信封(e)一起交给了你的FormMain_MouseMove方法。
this.btnStart.Click += new System.EventHandler(this.btnStart_Click);
btStart.Click的事件



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

