C#:自定义控件调用点击处理程序每​​隔一次点击(winform,而不是ASP)

时间:2012-05-23 01:48:50

标签: c# winforms controls mouseevent

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

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

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

非常感谢任何帮助。谢谢!

2 个答案:

答案 0 :(得分:1)

如果您点击得足够快,那么您将进入DoubleClick领域。

根据上述MSDN页面,事件顺序为:

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

  1. MouseDown事件。
  2. 点击活动。
  3. MouseClick事件。
  4. MouseUp事件。
  5. MouseDown事件。
  6. DoubleClick事件。
  7. MouseDoubleClick事件。
  8. MouseUp事件
  9. 如果您发现每Click

    只有一个DoubleClick个事件

    有关禁用它的方法,请尝试查看此MSDN页面,讨论ControlStyles

    从上面链接:

      

    StandardClick - 如果为true,则控件实施标准点击行为    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));
    

答案 1 :(得分:0)

当你足够快地点击你的控件时,它会调用双击而不是单击。 所以,你应该在你的点击功能中做这样的事情:

{
    control.Enabled = false; 
    ......
    control.Enabled = true;
}