2011-02-16 49 views
8

MS-Word鼠標點擊事件被用作:三腳鼠標在C#中單擊?

一按 - 將光標
雙擊 - 選擇字
三擊 - 選擇段落

在C#中我可以處理單,雙鼠標點擊事件,但我想處理事件C#Windows TextBox

例子:

void textbox1_TripleClick() 
{ 
    MessageBox.Show("Triple Clicked"); 
} 

回答

2

你只需要存儲時,雙擊那個盒子裏發生的時間。然後,在單擊處理程序中,檢查雙擊是否發生不超過N毫秒(N = 300左右)。

在這種情況下,直接調用您的TripleClick()函數或爲您派生的「TripleClickAwareTextBox」定義一個新事件。

+6

不要*猜測*對於某些用戶來說時間太短,對其他用戶來說太長。使用用戶在其操作系統中配置的時間作爲其首選雙擊時間。可通過SystemInformation.DoubleClickTime訪問 - http://msdn.microsoft.com/en-us/library/system.windows.forms.systeminformation.doubleclicktime.aspx – 2011-02-16 11:34:01

+3

您還希望確保每次點擊都發生在最後單擊,大小爲SystemInformation.DoubleClickSize。 – EricLaw 2012-09-02 17:59:51

2

我工作的一個類似的問題在C++

首先,你需要了解事件如何解僱,我帶點擊使用鼠標左鍵: - 點擊一次 - >左鍵單擊事件開火 - 雙擊 - >左鍵雙擊事件觸發

Windows僅支持您達到此級別。

對於三重點擊,它實質上是雙擊之後的點擊,中間的時間足夠小。所以,你需要做的是處理一個點擊事件,檢查之前是否有雙擊,並觸發一個三重點擊事件。

雖然代碼是不同的,這是我要做的事:

  • 聲明doubleClickTime & doubleClickInterval存儲上次我們雙擊&點擊之間的時間。
  • 申報tripleClickEventFired,表示我們已經觸發的事件(初始化爲false)

處理程序

click處理

if ((clock() - doubleClickFiredTime) < doubleClickInterval) 
    <fire triple click event> 
    tripleClickFired = true; 
else 
    <fire click event> 

雙擊處理程序

doubleClickTime == clock() 
doubleClickInterval == GetDoubleClickTime() * CLOCKS_PER_SEC/1000; 

If (!tripleClickEventFired) 
    <fire doubleClickEvent> 
else 
    tripleClickEventFired = false; 

我使用的功能是:

  • 時鐘():獲取當前系統時間單位
  • GetDoubleClickTime():由Windows提供一個函數來獲取點擊之間的時間
  • 的「 * CLOCKS_PER_SEC/1000;「部分是爲了GetDoubleClickTime()的返回值隱蔽到單位「」」

注:第三點擊火災既是一個系統級單擊和雙擊事件

0

做到這一點:

private int _clicks = 0; 
    private System.Windows.Forms.Timer _timer = new System.Windows.Forms.Timer(); 
    private void txtTextMessage_MouseUp(object sender, MouseEventArgs e) 
    { 
     _timer.Stop(); 
     _clicks++; 
     if (_clicks == 3) 
     { 
      // this means the trip click happened - do something 
      txtTextMessage.SelectAll(); 
      _clicks = 0; 
     } 
     if (_clicks < 3) 
     { 
      _timer.Interval = 500; 
      _timer.Start(); 
      _timer.Tick += (s, t) => 
      { 
       _timer.Stop(); 
       _clicks = 0; 
      }; 
     } 
    }