zoukankan      html  css  js  c++  java
  • 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 !");
    }

  • 相关阅读:
    计算器修正代码
    AsEnumrable和AsQueryable的区别
    c# 解释器模式与sping.net表达式的结合应用(金融里经常需要用到公式,这个公式是抽象的需要自己解释)
    Spring.net 间接调用被AOP拦截的方法失效(无法进入aop的拦截方法)
    信息熵公式的由来(转)
    期望风险、经验风险与结构风险之间的关系(转)
    梯度(转)
    奇特的数学问题(转)
    最大似然估计和最大后验估计(转)
    贝叶斯思想以及与最大似然估计、最大后验估计的区别(转)
  • 原文地址:https://www.cnblogs.com/qixinjian/p/5556331.html
Copyright © 2011-2022 走看看