combobox双击事件实现



方法一:实现双击 ComboBox 事件2012-04-13 10:52

 ComboBox 有双击事件,但是我们也知道永远也不会触发。至于为什么,问微软吧。
 
但是我们需要触发双击事件的时候怎么办呢?
 
 ComboBox 还有一个单击事件。那么我们就利用这个单击事件来达到双击事件的效果吧。
 
原理:
 
   1.触发单击事件时,获取系统鼠标的API 函数,即鼠标双击频率。
 
   2.判断鼠标在点击时的频率是否达成系统API 双击鼠标的限度。
 
   3.在判断里边你就可以写上你ComboBox 的双击事件的处理方式了。
 
说了这么多。那么看代码吧:
 
   * 首先加载进获取系统PAI函数的引用:
[System.Runtime.InteropServices.DllImport("user32.dll", EntryPoint = "GetDoubleClickTime")]
public extern static int GetDoubleClickTime();//重写系统API函数获取鼠标双击的有效间隔
private DateTime dtCmbLastClick = DateTime.MinValue;//存储两次单击的时间间隔
 
   * 在ComboBox 单击事件里写上判断:
 
private void ComboBox1_MouseClick(object sender, MouseEventArgs e)
{
 if (DateTime.Now - dtCmbLastClick < new TimeSpan(0, 0, 0, 0, GetDoubleClickTime()))
   {
       // 双击事件处理方式
   }
 else
  {
   dtCmbLastClick = DateTime.Now;
  }
}
 
Is Ok


方法二:用两次单击的时候来判断一下就行了:可以参见如下的代码:  
   
  DateTime   lastDownTime   =   DateTime.Now;  
  private   void   comboBox1_MouseDown(object   sender,   MouseEventArgs   e)  
  {  
  TimeSpan   sp   =   DateTime.Now   -   lastDownTime;  
  if   (sp.Milliseconds   <=   SystemInformation.DoubleClickTime)  
  {  
  System.Console.WriteLine("DoubleClick");  
  }  
  else  
  {  
  System.Console.WriteLine("Click");  
  }  
  lastDownTime   =   DateTime.Now;  
  }  

方法三:亲测可用

private DateTime dtCmbLastClick = DateTime.MinValue;
private void comboBox1_MouseClick(object sender, MouseEventArgs e)
{
if (DateTime.Now - dtCmbLastClick < new TimeSpan(0, 0, 0, 0, 200))
comboBox1_MouseDoubleClick(sender, e);
else
dtCmbLastClick =DateTime.Now;
}
private void comboBox1_MouseDoubleClick(object sender, MouseEventArgs e)
{
MessageBox.Show("doubleClick !");
}

posted @ 2016-06-03 15:05  蓝瑟黄昏  阅读(1332)  评论(0编辑  收藏  举报