2

我用 C# 编写了一个自定义控件(从 Forms.Control 继承),它似乎工作正常,但如果你按下按钮的速度足够快,就会出现问题:只有每一次其他点击才会调用 click 事件处理程序。如果您不快速按下它(少于每秒一次),则不会发生这种情况。无论您单击按钮多快,mouseUp 和 mouseDown 处理程序都会被调用。

罐装的winform按钮当然不会发生。

我无法使用固定按钮,因为我正在为 .net 紧凑框架编写应用程序,因此我需要一个自定义控件以使 UI 更美观。另外,我在 .net 框架的完整版上测试了我的代码,但我仍然遇到同样的问题。

任何帮助将不胜感激。谢谢!

4

2 回答 2

1

如果您的点击速度足够快,那么您就进入了DoubleClick领域。

根据上面的 MSDN 页面,事件的顺序是:

当发生此类用户操作时,控件会引发以下一系列事件:

  1. 鼠标按下事件。
  2. 点击事件。
  3. 鼠标点击事件。
  4. MouseUp 事件。
  5. 鼠标按下事件。
  6. 双击事件。
  7. 鼠标双击事件。
  8. MouseUp 事件

如果您注意到每个事件只有一个Click事件DoubleClick


如需禁用它的方法,请尝试查看此 MSDN Page 讨论ControlStyles

从上面的链接:

StandardClick -- 如果为 true,则控件实现标准 Click 行为。
StandardDoubleClick -- 如果为 true,则控件实现标准 DoubleClick 行为。如果 StandardClick 位未设置为 true,则忽略此样式。

所以在你的控件构造函数或加载事件中试试这个:

this.SetStyle(ControlStyles.StandardClick, true );
this.SetStyle(ControlStyles.StandardDoubleClick, false);

由于SetStyle它似乎不在 Compact Framework 中,您可以添加一个 DoublClick 事件并让它像这样以编程方式触发 Click 事件。

YourClickEvent(sender, new MouseEventArgs(System.Windows.Forms.MouseButtons.Left,1,0,0,0));
于 2012-05-23T01:56:26.933 回答
0

当您足够快地单击控件时,它会调用双击而不是单击。因此,您应该在 click 函数中执行以下操作:

{
    control.Enabled = false; 
    ......
    control.Enabled = true;
}
于 2012-05-23T01:58:40.313 回答