当我试图制作自己的自定义" WinForms"时,我对每个鼠标事件发生的时间感到困惑。我已经制作了自己的自定义课程,但现在这些事情是我必须重做的,因为他们不能正常工作。
我有一个自定义控件类。该类中的对象可以包含其他控件,可以包含其他控件等。有一个主控制,从图片框输入。该输入是鼠标的位置,甚至在图片框中激活了什么。
到目前为止,我已经想过,MouseMove
,MouseHover
和MouseDown
事件最简单,因为它们发生在简单的条件下。但其余部分需要有关鼠标位置,状态和过去的其他数据。 MouseDoubleClick
似乎在特定事件序列后严格激活(严格down-up-down-up
,down-up-down-move-up
和down-up-down-move-leave-enter-move-up
,且移动事件未激活)。考虑到这一点,我更加困惑。
每种鼠标事件发生在什么条件和顺序中?
修改
进一步的测试使事情变得更加混乱。首先,现在我想知道注册MouseMove
的速率是多少,并且测试它表明每个事件之间有不同的时间(或者我使用StopWatch
说的话)。这很重要,因为这会引发Hover
被触发的问题。
Click
为down-up
,允许在两者之间移动。
事实证明DoubleClick
足够简单 - down-up-down-up
,只允许在第二次下降之间进行移动。
Hover
只在每次Enter
之后激活一次,此时鼠标保持静止;如果你想再次触发Hover
,鼠标必须离开然后重新进入。
现在的问题是系统如何跟踪鼠标的活动 - 它如何检测鼠标的移动,按住和释放。希望这能帮助我得到完整的答案。