C# Windows 窗体处理单击垃圾邮件

标签 c# winforms events click

<分区>

我有一个应用程序有许多用户控件和每个按钮上的许多按钮,每个按钮都有一个 OnClick 事件,该事件会执行一些重要的操作,然后发送到新的用户控件。

当用户多次快速点击时,问题就来了,事件代码在退出到新的用户控件之前被执行了不止一次,从而导致了问题。

我目前的解决方案是在事件处理程序的第一行禁用按钮,但是对每个窗口和处理程序都这样做会很麻烦,我该怎么办?

编辑:从 Button 派生并覆盖 OnClick 事件是否是一个很好的解决方案,以便它始终检查“工作”变量,如果它是 true,它不会启动事件?像这样的东西:

public class MyButton : Button
{
private static bool isWorking = false;

protected override void OnClick(EventArgs e)
{
    if (!isWorking)
    {
        isWorking = true;
        base.OnClick(e);
        isWorking = false;
    }
    //Else do nothing
}

最佳答案

您可以使用一些 timeStamp 来延迟两次点击:

DateTime timeStamp;
//this will handle the clicks with the allowed interval being 0.5 second
//Note that a tick is equal to 1/10,000,000 of second.
private void click_Handler(object sender, EventArgs e) {
   if ((DateTime.Now - timeStamp).Ticks < 5000000) return;
   timeStamp = DateTime.Now;
   //your code goes here ....
}

关于C# Windows 窗体处理单击垃圾邮件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20709604/

相关文章:

c# - ASP.NET MVC View 模型问题

c# - 让 WebBrowser 控件在控制台应用程序中工作?

c# - 将表单背景色设置为自定义颜色

c# - 在对象初始值设定项中分配事件

c# - 获取有关 WCF 中需要很长时间的方法的进度信息的有效模式?

没有强制转换的 C# 隐式转换

c# - 删除组合框上的下拉箭头

c# - ListView 的空标记不能与 SetWindowTheme 和 AutoResizeColumns 一起使用

events - Node.js 事件发射器绑定(bind)到多个实例

.net - 我可以将 BeginInvoke 与 MulticastDelegate 一起使用吗?