一般控件的双击事件会连带引发单击事件!
如下方法,即创建一个Timer控件用于监视单击事件。
一旦单击发生,就自动启动Timer的Tick事件(timer1_Tick(object sender, EventArgs e)),一定时间后,若没有第二次点击发生,则执行单击事件(simpleClickHandler()),若在这段时间有双击事件(dataGridView1_MouseDoubleClick((object sender, MouseEventArgs e))发生,则停止Timer,此时单击事件就不会发生了。。
图1
图2、
timer1_Tick()判断是不是双击的主要方法就是两次单击的时间间隔不能超过500ms。
-
private int mClick = 1;
-
public Form1()
-
{
-
InitializeComponent();
-
}
-
private void timer1_Tick(object sender, EventArgs e)
-
{
-
this.mClick += 1;
-
if (this.mClick == 5)
-
{
-
this.simpleClickHandler();
-
timer1.Enabled = false;
-
this.mClick = 1;
-
}
-
}
-
private void dataGridView1_MouseClick(object sender, MouseEventArgs e)
-
{
-
if (e.Button == MouseButtons.Left)
-
timer1.Enabled = true;
-
}
-
private void dataGridView1_MouseDoubleClick(object sender, MouseEventArgs e)
-
{
-
timer1.Enabled = false;
-
this.doubleClickHandler();
-
}
-
private void doubleClickHandler()
-
{
-
MessageBox.Show("我是双击");
-
}
-
private void simpleClickHandler()
-
{
-
MessageBox.Show("我是单击");
- }
以上方法虽然能实现对单击事件的屏幕,但总感觉性能上差了些。而有时连续多次双击,会出现单击与双击错乱的情况。本方法仅作参考,还需要更优的解决方案。
参考博客: