C# 屏蔽控件单击事件更优的方案

分类: C#/.net

    下面使用线程的方法来屏蔽控件单击事件,这个方法更优一些。双击的时候能迅速响应,但是影响到了单击时的响应。

    主要原理也是判断两个点击的差距是不是大于500ms。

     要深刻理解这里的工作原理,还是需要多加强对鼠标、键盘及其它高级事件的原理。

  1. private int mLastTime = 0; 
  2.       private Thread mSClickThread;
  3.       public Form1() 
  4.       { 
  5.           InitializeComponent(); 
  6.       }
  7.       private void doubleClickHandler() 
  8.       { 
  9.           MessageBox.Show("我是双击"); 
  10.       }
  11.       private void simpleClickHandler() 
  12.       { 
  13.           MessageBox.Show("我是单击"); 
  14.       }
  15.       private void dataGridView1_MouseDown(object sender, MouseEventArgs e) 
  16.       { 
  17.           if ((Environment.TickCount - this.mLastTime) < 500) 
  18.           { 
  19.               Thread dClickThread = new Thread(() => 
  20.               { 
  21.                   doubleClickHandler(); 
  22.               } 
  23.                   ); 
  24.               dClickThread.IsBackground = true; 
  25.               dClickThread.Priority = ThreadPriority.Highest; 
  26.               dClickThread.Start();
  27.               this.mSClickThread.Abort(); 
  28.           } 
  29.           else 
  30.           { 
  31.               this.mSClickThread = new Thread(new ThreadStart(() => 
  32.               { 
  33.                   Thread.Sleep(300); 
  34.                   simpleClickHandler(); 
  35.                 }) 
  36.                ); 
  37.               this.mSClickThread.IsBackground = true; 
  38.               this.mSClickThread.Start(); 
  39.           } 
  40.       }
  41.       private void dataGridView1_MouseUp(object sender, MouseEventArgs e) 
  42.       { 
  43.           this.mLastTime = Environment.TickCount; 
  44.       }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值