2011-02-16 44 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; 
      }; 
     } 
    }