[英]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.