【WinForm.NET开发】使用鼠标事件

news/2024/10/17 10:24:36/

本文内容

  1. 鼠标事件
  2. 鼠标信息
  3. 在屏幕坐标和客户端坐标之间转换
  4. 标准 Click 事件行为
  5. 切换控件

大多数 Windows 窗体程序通过处理鼠标事件来处理鼠标输入。 本文概述了鼠标事件,包括有关何时使用每个事件和为每个事件提供的数据的详细信息。

1、鼠标事件

响应鼠标输入的主要方法是处理鼠标事件。 下表显示了鼠标事件并说明了这些事件的引发时间。

鼠标事件说明
Click此事件在释放鼠标按钮时发生,通常在 MouseUp 事件之前。 此事件的处理程序接收类型为 EventArgs 的参数。 如果只需确定何时发生单击,处理此事件。
MouseClick此事件在用户使用鼠标单击控件时发生。 此事件的处理程序接收类型为 MouseEventArgs 的参数。 如果需要在发生单击时获取有关鼠标的信息,处理此事件。
DoubleClick此事件在双击控件时发生。 此事件的处理程序接收类型为 EventArgs 的参数。 如果只需确定何时发生双击,处理此事件。
MouseDoubleClick此事件在用户使用鼠标双击控件时发生。 此事件的处理程序接收类型为 MouseEventArgs 的参数。 如果需要在发生双击时获取有关鼠标的信息,处理此事件。
MouseDown当鼠标指针位于控件上方并且用户按下鼠标按钮时,会发生此事件。 此事件的处理程序接收类型为 MouseEventArgs 的参数。
MouseEnter当鼠标指针进入控件的边框或工作区时(具体取决于控件的类型),会发生此事件。 此事件的处理程序接收类型为 EventArgs 的参数。
MouseHover此事件在鼠标指针停留在控件上时发生。 此事件的处理程序接收类型为 EventArgs 的参数。
MouseLeave当鼠标指针离开控件的边框或工作区时(具体取决于控件的类型),会发生此事件。 此事件的处理程序接收类型为 EventArgs 的参数。
MouseMove当鼠标指针发生移动但仍位于控件上方时,会发生此事件。 此事件的处理程序接收类型为 MouseEventArgs 的参数。
MouseUp当鼠标指针位于控件上方,并且用户释放鼠标按钮时,会发生此事件。 此事件的处理程序接收类型为 MouseEventArgs 的参数。
MouseWheel当用户滚动鼠标滚轮并且控件有焦点时,会发生此事件。 此事件的处理程序接收类型为 MouseEventArgs 的参数。 可以使用 MouseEventArgs 的 Delta 属性来确定鼠标滚动的距离。

2、鼠标信息

MouseEventArgs 将发送到与单击鼠标按钮和跟踪鼠标移动相关的鼠标事件处理程序。 MouseEventArgs 提供有关当前鼠标状态的信息,包括鼠标指针在客户端坐标中的位置、按下的鼠标按钮是哪一个以及是否已经滚动鼠标滚轮。 几个鼠标事件(例如在鼠标指针进入或离开控件边界时引发的事件)会向事件处理程序发送 EventArgs,但不提供详细信息。

如果想要知道鼠标按钮当前的状态或鼠标指针的位置,并且希望避免处理鼠标事件,还可以使用 Control 类的 MouseButtons 和 MousePosition 属性。 MouseButtons 返回有关当前按下哪些鼠标按钮的信息。 MousePosition 返回鼠标指针的屏幕坐标,等同于由 Position 返回的值。

3、在屏幕坐标和客户端坐标之间转换

由于某些鼠标位置信息以客户端坐标提供,另一些以屏幕坐标提供,因此可能需要将某个点的位置信息从一个坐标系统转换到另一个坐标系统。 通过使用 Control 类提供的 PointToClient 和 PointToScreen 方法可轻松完成此操作。

4、标准 Click 事件行为

如果想要以正确的顺序处理鼠标单击事件,则需要了解在 Windows 窗体控件中引发的单击事件的顺序。 当按下任何受支持的鼠标按钮并释放时,所有 Windows 窗体控件都将以相同的顺序引发单击事件,下表中注明的个别控件除外。 下表显示单击鼠标按钮所引发事件的顺序:

  1. MouseDown 事件。
  2. Click 事件。
  3. MouseClick 事件。
  4. MouseUp 事件。

下面显示双击鼠标按钮所引发事件的顺序:

  1. MouseDown 事件。

  2. Click 事件。

  3. MouseClick 事件。

  4. MouseUp 事件。

  5. MouseDown 事件。

  6. DoubleClick 事件。

    此顺序可能不同,具体取决于相关控件的 StandardDoubleClick 样式位是否设置为 true。 

  7. MouseDoubleClick 事件。

  8. MouseUp 事件。

个别控件

以下控件不符合标准鼠标单击事件行为:

  • Button

  • CheckBox

  • ComboBox

  • RadioButton

    对于 ComboBox 控件,如果用户单击编辑字段、按钮或列表中的某个项,将发生稍后详细说明的事件行为。

    • 左键单击:Click、MouseClick
    • 右键单击:不会引发任何 click 事件
    • 左键双击:Click、MouseClick;Click、MouseClick
    • 右键双击:不会引发任何 click 事件
  • TextBox、RichTextBox、ListBox、MaskedTextBox 和 CheckedListBox 控件

    当用户单击这些控件内的任意位置时,将发生稍后详细说明的事件行为。

    • 左键单击:Click、MouseClick
    • 右键单击:不会引发任何 click 事件
    • 左键双击:Click、MouseClick、DoubleClick、MouseDoubleClick
    • 右键双击:不会引发任何 click 事件
  • ListView 控件

    仅当用户单击 ListView 控件中的项时,才会发生稍后详细说明的事件行为。 单击该控件上其他任意位置不会引发任何事件。 除了稍后说明的事件外,还有 BeforeLabelEdit 和 AfterLabelEdit 事件,如果想要对 ListView 控件进行验证,你可能会对这些事件感兴趣。

    • 左键单击:Click、MouseClick
    • 右键单击:Click、MouseClick
    • 左键双击:Click、MouseClick;DoubleClick、MouseDoubleClick
    • 右键双击:Click、MouseClick;DoubleClick、MouseDoubleClick
  • TreeView 控件

    仅当用户单击 TreeView 控件中的项或项的右侧时,才会发生稍后详细说明的事件行为。 单击该控件上其他任意位置不会引发任何事件。 除了稍后说明的事件,还有 BeforeCheck、BeforeSelect、BeforeLabelEdit、AfterSelect、AfterCheck 和 AfterLabelEdit 事件,如果想要对 TreeView 控件进行验证,你可能会对这些事件感兴趣。

    • 左键单击:Click、MouseClick
    • 右键单击:Click、MouseClick
    • 左键双击:Click、MouseClick;DoubleClick、MouseDoubleClick
    • 右键双击:Click、MouseClick;DoubleClick、MouseDoubleClick

5、切换控件的绘制行为

切换控件(如派生自 ButtonBase 类的控件)具有独特的绘制行为和鼠标单击事件:

  1. 用户按下鼠标按钮。

  2. 控件以按下状态进行绘制。

  3. 引发 MouseDown 事件。

  4. 用户释放鼠标按钮。

  5. 控件以引发状态进行绘制。

  6. 引发 Click 事件。

  7. 引发 MouseClick 事件。

  8. 引发 MouseUp 事件。

    如果用户在鼠标按钮处于按下状态时将指针移出切换控件(例如在鼠标按下时将鼠标从 Button 控件移出),那么切换控件将以引发状态进行绘制,并且只发生 MouseUp 事件。 在这种情况下,将不会发生 Click 或 MouseClick 事件。


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

相关文章

C++中的类型推断(auto 和 decltype)

类型推断 是指在编程语言中自动推导表达式的数据类型。在C11之前,每个数据类型都需要在编译时显示声明,在运行时限制表达式的值,但在C的新版本之后,引入了 auto 和 decltype等关键字,这允许程序员将类型推导留给了编译…

LSTM和GRU vs 循环神经网络RNN

1、考虑下列三种情况下,对比一下普通RNN的表现和LSTM和GRU表现: (1)早期观测值对预测未来观测者具有非常重要的意义。 考虑一个极端情况,其中第一个观测值包含一个校验和, 目标是在序列的末尾辨别校验和是…

微信小程序预览pdf,修改pdf文件名

记录微信小程序预览pdf文件,修改pdf名字安卓和ios都可用。 1.安卓和苹果的效果 2.需要用到的api 1.wx.downloadFile wx.downloadFile 下载文件资源到本地。客户端直接发起一个 HTTPS GET 请求,返回文件的本地临时路径 (本地路径),单次下载…

低代码选型注意事项

凭借着革命性的生产力优势,低代码技术火爆了整个IT圈。面对纷繁复杂的低代码和无代码产品,开发者该如何选择? 在研究低代码平台的年数上,本人已有3年,也算是个低代码资深用户了,很多企业面临低代码选型上的…

七功能遥控编解码芯片

一、基本概述 TT6/TR6 是一对为遥控玩具车设计的 CMOS LSI 芯片。TT6 为发射编码芯片,TR6 为接收解码芯片。TT6/TR6 提供七个功能按键控制前进、后退、左转、右转、加速、独立功能 F1,独立功能 F2 的动作。除此以外,还有这五种常规小车功能(…

【赠书第13期】边缘计算系统设计与实践

文章目录 前言 1 硬件架构设计 2 软件框架设计 3 网络结构设计 4 安全性、可扩展性和性能优化 5 推荐图书 6 粉丝福利 前言 边缘计算是一种新兴的计算模式,它将计算资源推向网络边缘,以更好地满足实时性、低延迟和大规模设备连接的需求。边缘计算…

【zookeeper特点和集群架构】

文章目录 1. Zookeeper介绍2、ZooKeeper数据结构3、Zookeeper集群架构 1. Zookeeper介绍 ZooKeeper 是一个开源的分布式协调框架,是Apache Hadoop 的一个子项目,主要用来解决分 布式集群中应用系统的一致性问题。Zookeeper 的设计目标是将那些复杂且容易…

LeetCode——动态规划

动态规划 一、一维数组:斐波那契数列 爬楼梯70简单 dp定义: dp[i]表示爬到第i阶有多少种不同的方式 状态转移方程: dp[i] dp[i-1] dp[i-1] (每次可以爬1或2个台阶) 边界条件: dp[0] 1; dp[1] 1;&#…