我有一个带有一些复杂拖动功能的控件。它也是可点击的。
我发现有时点击(快速鼠标下移,无移动)会导致OnMouseUp
事件,有时会发生Click
事件。这似乎取决于时间...如果我在MouseDown
事件上设置断点,我会得到Click
,否则我得到(主要)OnMouseUp
。
那么Windows如何决定触发哪个事件?
由于
答案 0 :(得分:2)
鼠标单击应触发两个事件。有关详细信息,请参阅Mouse Events in Windows Forms,但(从文档中):
当按下并释放鼠标按钮时(无论使用哪个鼠标按钮),所有Windows窗体控件都以相同的顺序引发单击事件,除非在以下列表中针对各个控件进行了说明。以下列表显示了单个鼠标按钮单击引发的事件顺序:
MouseDown事件。
点击活动。
MouseClick事件。
MouseUp事件。
请注意,某些控件具有不同的行为(在各个控件中记录),双击行为也有所不同(也记录为on MSDN)。
另外 - 在调试器中放置断点可能会导致消息处理行为偶尔变得有点奇怪。如果您希望按顺序查看所有消息,我建议使用Debug.WriteLine
或类似的方法来跟踪单个消息的所有输出,而不是使用断点。