我在一个完全自定义的圆形按钮中添加了OnMouseClick。当我快速单击两次时,第二次单击事件不起作用。我想这可能是winform消息处理中的一些问题。下面是我的代码:
protected override void OnMouseClick(MouseEventArgs e)
{
base.OnMouseClick(e);
Point pt = e.Location;
if (region.IsVisible(pt))
{
IsCheck = !IsCheck;
if (IsCheck)
ActivateChecked();//change the control color to red
else
ActivateCancel();//change the control color to green
}
}
请帮帮我。
我尝试了双缓冲区和区域。可见的,把秒表计算运行时间。但我不是这个问题。但winform的原生按钮可以改变颜色的每一个点击。
1条答案
按热度按时间wpcxdonn1#
据我所知,您创建了一个自定义圆形按钮,并希望它的颜色根据鼠标单击而改变,即使鼠标单击是快速连续发生的。要实现这一点,您可能希望尝试
MouseDown
事件,并使用BeginInvoke
来发布颜色更改消息,而不阻塞队列中已经存在的鼠标事件。为了测试,我做了 * 三 * 个颜色状态而不是两个,这样快速点击鼠标两次就会引起明确的变化,这将表明这是工作。换句话说,为了测试的目的,因为按钮开始是蓝色的,两次快速点击应循环通过红色状态并结束于绿色。(我将尝试使用“典型”实现重现您的用例,因为您还没有展示如何继承或实现您的自定义按钮。)