在MS-Word
鼠标点击事件中用作:
单击 - 放置光标
双击 - 选择单词
三击 - 选择段落
在C#中,我可以处理单击和双击鼠标事件,但我想在 C#Windows TextBox 中处理Triple Mouse Click
事件。
示例:
void textbox1_TripleClick()
{
MessageBox.Show("Triple Clicked");
}
答案 0 :(得分:7)
看看这个: Mousebuttoneventargs.clickcount
我认为这应该涵盖它。
答案 1 :(得分:3)
DO THIS:
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;
};
}
}
答案 2 :(得分:2)
您只需存储在该框中发生双击的时间。然后,在单击的处理程序中,检查双击发生的时间是否超过N毫秒(N = 300左右)。
在这种情况下,直接调用您的TripleClick()函数或为您派生一个新事件派生“TripleClickAwareTextBox”。
答案 3 :(得分:2)
我正在研究类似的C ++问题
首先,您需要了解事件是如何触发的,我将使用鼠标左键单击: - 点击一次 - &gt;触发了左键单击事件 - 双击 - &gt;左击双击事件
Windows仅支持您达到此级别。
对于三次点击,它实际上是双击后点击,中间时间足够小。因此,您需要做的是处理点击事件,检查之前是否有双击并触发三击事件。
虽然代码不同,但我就是这样做的:
<强>处理程序强>
点击处理程序
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;
我使用的功能是:
注意:第三次点击会在系统级别触发点击和双击事件
答案 4 :(得分:0)
我修改了Jimmy T的答案,将代码封装到一个类中,并使其更易于应用于表单上的多个控件。
班级是这个:
using System.Windows.Forms;
public class TripleClickHandler
{
private int _clicks = 0;
private readonly System.Windows.Forms.Timer _timer = new System.Windows.Forms.Timer();
private readonly TextBox _textBox;
private readonly ToolStripTextBox _toolStripTextBox;
public TripleClickHandler(TextBox control)
{
_textBox = control;
_textBox.MouseUp += TextBox_MouseUp;
}
public TripleClickHandler(ToolStripTextBox control)
{
_toolStripTextBox = control;
_toolStripTextBox.MouseUp += TextBox_MouseUp;
}
private void TextBox_MouseUp(object sender, MouseEventArgs e)
{
_timer.Stop();
_clicks++;
if (_clicks == 3)
{
// this means the trip click happened - do something
if(_textBox!=null)
_textBox.SelectAll();
else if (_toolStripTextBox != null)
_toolStripTextBox.SelectAll();
_clicks = 0;
}
if (_clicks < 3)
{
_timer.Interval = 500;
_timer.Start();
_timer.Tick += (s, t) =>
{
_timer.Stop();
_clicks = 0;
};
}
}
}
然后,将其应用于文本框,您可以执行以下操作:
partial class MyForm : Form
{
UIHelper.TripleClickHandler handler;
public MyForm()
{
InitializeComponent();
handler = new UIHelper.TripleClickHandler(myTextBox);
}
}
或者,如果您不使用控件的标记,则只需执行以下操作:
partial class MyForm : Form
{
public MyForm()
{
InitializeComponent();
myTextBox.Tag = new UIHelper.TripleClickHandler(myTextBox);
}
}