![](/img/trans.png)
[英]i want to detect an item double click in a winforms listbox control. [how to handle click on blank area?]
[英]How to handle WinForms control click event when it's not a double click
我需要区分单击和双击,但是我需要在click事件中执行此操作。 我之所以需要这样做,是因为如果要单击,我要调用功能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);
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.