如果不是双击,如何处理WinForms控件单击事件

我需要区分单击和双击,但我需要在点击事件期间执行此操作。 我需要这个,因为如果只有一次单击我想调用函数A,如果有双击我想调用函数B.但是只有单击才能调用函数A.

如何使用C#(或VB)中的标准Winforms实现此目的?

在点击事件之后,您需要使用计时器等待“一段时间”来确定点击是否是单击。 您可以使用SystemInformation.DoubleClickTime属性来确定系统将认为顺序单击双击的单击之间的最大间隔。 您可能希望为此添加一些填充。

在单击处理程序中,递增单击计数器并启动计时器。 在双击处理程序中,设置一个标志以表示发生了双击。 在计时器处理程序中,检查是否引发了双击事件。 如果没有,只需点击一下即可。

像这样的东西:

private bool _doubleClicked = false; private Timer _clickTrackingTimer = new Timer(SystemInformation.DoubleClickTimer + 100); private void ClickHandler(object sender, EventArgs e) { _clickTrackingTimer.Start(); } private void DoubleClickHandler(object sender, EventArgs e) { _doubleClicked = true; } private void TimerTickHandler(object sender, EventArgs e) { _clickTrackingTimer.Stop(); if (!_doubleClicked) { // single click! } _doubleClicked = false; } 

另一个选项是创建一个派生自Button的自定义控件,然后在构造函数中调用SetStyles()方法,这是一个受保护的方法)并设置ControlStyles标志

 class DoubleClickButton : Button { public DoubleClickButton() : base() { SetStyle(ControlStyles.StandardDoubleClick, true); } }