在C#中,有些情况下客户会有比较奇怪的要求,比如说:button类的DoubleClick事件触发。
为什么我会说它奇怪呢?因为button类虽然有doubleclick事件,但是在design的时候是不能预览的。
比如button类的源码中就有:
所以问题就来了,如果真的要实现button的双击事件,该怎么去做呢?在click中重写doubleclick?
那样未免太low了,这里有一个简单的方法实现button等类的doubleclick等事件的触发。
一,认识清楚问题所在
其实button中是有预定义doubleclick事件的,之所以没有在design中看到这个事件是因为这句话:
[Browsable(false)]。
这句话在控件前面就表明控件属性,doubleclick不可浏览。
二,可以直接订阅Event吗?
如果你查阅很多版本中的doubleclick解释,就会发现这么一段代码:
![]()
实际上这段代码可以通过编译,但是运行时不会有事件触发的。
其实原因在MSDN中也有解释:
MSDN中的解释是:必须设置stardardclick和stardardDoubleClick为true才能触发事件。
三,如何才能让doubleclick事件正常被触发
如果按照msdn中的写法,直接
button.SetStyle(ControlStyles.StandardClick,true);
那么就会报错,因为SetStyle是protected属性,只有from才能用this.SetStyle。
所以到底要怎样才能最简单的实现按键的双击呢?
四,采用继承的方式最便捷的实现doubleClick
下面直接上代码:
public class DoubleClickButton:Button
{
public DoubleClickButton()
{
SetStyle(ControlStyles.StandardClick | ControlStyles.StandardDoubleClick, true);
}
}
在子类中实现setStyle,这样在setstyle为保护的情况下,不用重写,就可以简单的实现doubleclick事件,并且使事件正常触发。
直接用var doubleClickButton=new DoubleClickButton();
产生的对象既可以实现button类的所有功能,也可以额外实现doubleclick事件。
如果觉得好,为什么不点个赞呢?