方法一:实现双击 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 !");
}