按钮响应了MouseDown消息以后,为什么不再响应MouseClick和Click消息了?

wqerqoo 2014-08-01 09:39:37
我想测试一下Click/MouseClick/MouseDown这3个事件的发生顺序,于是建立了一个winform,然后给一个button2控件添加了如下的代码:

private void button2_Click(object sender, EventArgs e)
{
MessageBox.Show("click");
}

private void button2_MouseDown(object sender, MouseEventArgs e)
{
MessageBox.Show("mouse down");
}

private void button2_MouseClick(object sender, MouseEventArgs e)
{
MessageBox.Show("mouse click");
}

运行的时候发现,点击鼠标,只会弹出"mouse down"这一个对话框,另外两个"mouse click"和"click"是不会出现的。
如果我把焦点设置到该按钮上,按下回车,则会弹出"click"。

网上不是说,鼠标点击会依次触发mouse down, mouse click, click事件吗,为什么我只能看到一个消息框?
...全文
360 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
gomoku 2014-08-01
  • 打赏
  • 举报
回复
引用 5 楼 Z65443344 的回复:
窗口事件需要主线程来触发, 在你鼠标点下的瞬间,窗口捕获到系统发给它的消息,进而执行相应的动作 鼠标抬起的瞬间,它又会捕获另一个消息 如果窗口本身繁忙,消息会被错过,等它不繁忙的时候,鼠标已经抬起多时,它再也捕获不到了
准确地说,倒不是窗口繁忙的原因。 它是因为MessageBox.Show启动了一个新的模式消息循环,后面的MouseUp被送到新的循环了。 窗口丢弃重复消息只限定一些特殊消息(比如WM_PAINT,WM_TIMER等)。
huier513 2014-08-01
  • 打赏
  • 举报
回复
我也遇到了类似问题。。。
於黾 2014-08-01
  • 打赏
  • 举报
回复
窗口事件需要主线程来触发, 在你鼠标点下的瞬间,窗口捕获到系统发给它的消息,进而执行相应的动作 鼠标抬起的瞬间,它又会捕获另一个消息 如果窗口本身繁忙,消息会被错过,等它不繁忙的时候,鼠标已经抬起多时,它再也捕获不到了
於黾 2014-08-01
  • 打赏
  • 举报
回复
其实你想,如果我有一个timer,正常应该每秒执行一次 那么我在按钮里sleep(30000);或用for循环10亿次, 窗口会卡半分钟 半分钟后窗口回复,难道timer会突然执行30次?当然不会.
祥子爱游戏 2014-08-01
  • 打赏
  • 举报
回复
我是来学习楼上的知识
於黾 2014-08-01
  • 打赏
  • 举报
回复
引用 1 楼 gomoku 的回复:
不要用MessageBox.Show("click");它干扰了正常过程。 用Debug.WriteLine。在你VS的输入窗口可以观察到输出。
+1 事件函数发生的时候,如果主线程被阻塞,则此次事件会被丢弃,没有得到处理 Debug.WriteLine我也不会用,要是我,会放个文本框,然后textbox1+=来看结果
gomoku 2014-08-01
  • 打赏
  • 举报
回复
不要用MessageBox.Show("click");它干扰了正常过程。 用Debug.WriteLine。在你VS的输入窗口可以观察到输出。
代码转载自:https://pan.quark.cn/s/a4b39357ea24 LA 1010 逻辑分析仪被视作一种效能卓越的数字信号分析设备,其核心功能在于对数字通信协议,例如I²C,进行检测与解构。本资源将集中阐述LA 1010的操作流程以及如何借助该设备对I²C协议的波形展开分析。 确保逻辑分析仪被正确地连接至目标系统是极为关键的环节。在运用LA 1010的过程中,必须将分析仪的通道0与通道1分别对应连接至目标装置的SCL(时钟)与SDA(数据)线路。务必保证连接的稳固性且无任何干扰因素,以此确保数据采集的精确度。 随后,需要设定采样参数。采样频率对于能否成功捕捉到信号具有决定性的作用。针对I²C协议,通常选用的采样频率范围介于100kHz到400kHz之间,这一范围的选择取决于实际应用场景中I²C总线的运行速度。然而,LA 1010所能达到的最高采样速率可能高达500MHz,因此需要根据具体需求进行相应的调整。此外,还必须精心挑选适配目标设备工作电压的电压等级,例如3.3V、5V或1.8V。 在软件操作层面,需要选取恰当的通道与协议种类,即I²C。一旦启动采样,逻辑分析仪便开始记录相关数据。软件界面通常会实时展示波形图,为观察与分析提供便利。 关于I²C协议波形的解读,我们可以遵循以下步骤: 1. 总线处于空闲状态时:SCL与SDA均维持在高电平位置,这表明总线当前未进行数据传输。 2. 传输起始信号:当SCL处于高电平期间,SDA线从高电平转换至低电平,此动作标志着数据传输的开始。 3. 地址、数据及应答的识别:在每一个SCL高电平脉冲的持续时间内,SDA线上的电平状态代表了数据位。地址与数据的传输均为双向过程,而读写标识则由SDA线上的电平来...

111,129

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧