为什么按钮处理点击的方式与非按钮不同
Why does a button handle a click differently to non-buttons
这听起来像是一个非常愚蠢的问题,但我注意到当我从 Button
或 [= 继承 class 时,自定义按钮的 Click
行为有所不同14=].
我正在开发一些具有自定义外观的控件,其中包括一个按钮。默认的用户控件 class 声明是这样的:
public partial class cButton : UserControl
添加所有 GUI 内容后,我将其添加到我的表单中并测试了点击行为。
当我快速连续单击该按钮时,它只会记录其他点击,甚至不会记录所有其他点击。我以为测试代码有问题,但是当我将确切的代码复制到一个普通的 Winforms 按钮时,无论多快,它都会记录每次点击。
编辑:如果我没有快速点击,用户控件会记录每次点击,即我在每次点击之间等待几秒钟。
我将自定义控件的 decleration 更改为从按钮 class 继承并且绝对没有对任何代码进行其他更改:
public partial class cButton : Button
当我进行点击测试时,自定义按钮表现良好,就像 winforms 按钮一样,没有错过任何点击。
只是为了测试一下,我在我的表单中添加了一个列表框,并在其点击事件中添加了相同的测试代码,它就像一个非按钮,只是偶尔注册一次点击。
我认为应该一致地处理点击,但显然并没有那么简单。
由此产生的问题:
What does a button do differently and what could I do to ensure proper
click-behaviour when it is not possible to inherit from a Button
?
我认为您遇到的问题是,如果您点击按钮的速度太快,它会注册为 double-click 而不是点击。您可以通过写入 double-click 上的输出来检查这一点,这样如果您的代码没有触发,请检查 double-click 事件是否触发。
您的自定义 UserControl
区分单击和双击。
要使其像按钮一样操作,您需要设置 StandardDoubleClick
控件样式,以便当用户快速连续单击两次时,控件会注册两个 single 点击并引发两个点击事件,而不是双击事件。
在构造函数中添加以下语句:
this.SetStyle(ControlStyles.StandardDoubleClick, false);
这听起来像是一个非常愚蠢的问题,但我注意到当我从 Button
或 [= 继承 class 时,自定义按钮的 Click
行为有所不同14=].
我正在开发一些具有自定义外观的控件,其中包括一个按钮。默认的用户控件 class 声明是这样的:
public partial class cButton : UserControl
添加所有 GUI 内容后,我将其添加到我的表单中并测试了点击行为。
当我快速连续单击该按钮时,它只会记录其他点击,甚至不会记录所有其他点击。我以为测试代码有问题,但是当我将确切的代码复制到一个普通的 Winforms 按钮时,无论多快,它都会记录每次点击。
编辑:如果我没有快速点击,用户控件会记录每次点击,即我在每次点击之间等待几秒钟。
我将自定义控件的 decleration 更改为从按钮 class 继承并且绝对没有对任何代码进行其他更改:
public partial class cButton : Button
当我进行点击测试时,自定义按钮表现良好,就像 winforms 按钮一样,没有错过任何点击。
只是为了测试一下,我在我的表单中添加了一个列表框,并在其点击事件中添加了相同的测试代码,它就像一个非按钮,只是偶尔注册一次点击。
我认为应该一致地处理点击,但显然并没有那么简单。
由此产生的问题:
What does a button do differently and what could I do to ensure proper click-behaviour when it is not possible to inherit from a
Button
?
我认为您遇到的问题是,如果您点击按钮的速度太快,它会注册为 double-click 而不是点击。您可以通过写入 double-click 上的输出来检查这一点,这样如果您的代码没有触发,请检查 double-click 事件是否触发。
您的自定义 UserControl
区分单击和双击。
要使其像按钮一样操作,您需要设置 StandardDoubleClick
控件样式,以便当用户快速连续单击两次时,控件会注册两个 single 点击并引发两个点击事件,而不是双击事件。
在构造函数中添加以下语句:
this.SetStyle(ControlStyles.StandardDoubleClick, false);