为什么按钮处理点击的方式与非按钮不同

时间:2016-01-26 12:29:07

标签: c# winforms user-controls onclick

这可能听起来像是一个非常愚蠢的问题,但我注意到,当我从ClickButton继承我的班级时,我的自定义按钮的UserControl行为会有所不同。

我正在开发一些具有自定义外观的控件,其中包括一个按钮。默认的用户控件类声明如下:

public partial class cButton : UserControl

在我添加了所有GUI内容后,我将其添加到我的表单中并测试了点击行为。

当我快速连续点击按钮时,它只记录其他点击,甚至不是每次点击。我认为测试代码有问题,但是当我将确切的代码复制到正常的Winforms按钮时,无论多快,都会记录每次点击。

编辑:如果我没有点击快速,则用户控制会记录每次点击,即我在每次点击之间等待几秒钟。

我将自定义控件的删除更改为继承自按钮类,并且绝对不会对任何代码进行任何其他更改:

public partial class cButton : Button

当我进行点击测试时,自定义按钮表现良好,就像winforms按钮一样,没有错过点击。

为了测试一下,我在表单中添加了一个列表框,并在其click事件中添加了相同的测试代码,它的作用就像一个非按钮,只是偶尔注册一次点击。

我认为应该始终如一地处理点击,但显然不是那么简单。

我从中产生的问题:

  

按钮的作用有何不同,我该怎么做以确保正确   当无法从Button继承时,点击行为?

2 个答案:

答案 0 :(得分:1)

我认为您遇到的问题是,如果您点击该按钮太快,则会将其注册为双击而非点击。您可以通过双击写入输出来检查这一点,这样如果您的代码没有触发,请检查是否有双击事件。

答案 1 :(得分:1)

您的自定义UserControl区分了单击和双击。

要使其像按钮一样运行,您需要设置StandardDoubleClick控件样式,以便当用户快速连续点击两次时,控件会注册两个单个点击并引发两个单击事件,而不是双击事件。

在构造函数中添加以下语句:

this.SetStyle(ControlStyles.StandardDoubleClick, false);