一般控件的双击事件会连带引发单击事件!
如下方法,即创建一个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("我是单击");
- }
以上方法虽然能实现对单击事件的屏幕,但总感觉性能上差了些。而有时连续多次双击,会出现单击与双击错乱的情况。本方法仅作参考,还需要更优的解决方案。
参考博客: