簡體   English   中英

不是雙擊時如何處理WinForms控件單擊事件

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM