C#中Button的DoubleClick等的实现(不用重写类)

在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事件。


如果觉得好,为什么不点个赞呢?

  • 8
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值