是否可以避免在Winform上多次点击按钮?

时间:2009-08-06 09:51:08

标签: winforms events event-handling

假设您在表单上有一个按钮,在文本框中计数为1000,然后将其清除。

如果我快速点击按钮五次(在运行时),Click事件处理程序将被调用5次,我将看到计数为1000次。

第一次点击计数时是否可以禁用该按钮上的其他点击?

注意:在单击处理程序的第一个语句中禁用该按钮,然后在最后重新启用不起作用。此外,取消订阅/订阅点击事件( - =后跟+ =)不起作用。

这里有一个示例来说明:

  private bool runningExclusiveProcess = false;

    private void button1_Click(object sender, EventArgs e)
    {
        this.button1.Click -= new System.EventHandler(this.button1_Click);

        if (!runningExclusiveProcess)
        {
            runningExclusiveProcess = true;
            button1.Enabled = false;


            textBox1.Clear();
            for (int i = 0; i < 1000; i++)
            {
                textBox1.AppendText(i + Environment.NewLine);
            }


                runningExclusiveProcess = false;
            button1.Enabled = true;
        }

        this.button1.Click += new System.EventHandler(this.button1_Click);
}

3 个答案:

答案 0 :(得分:2)

只需在初次点击后禁用按钮,再运行一个计时器,该计时器将在勾选时重新启用该按钮并自行禁用

答案 1 :(得分:2)

此处的代码段:

公共部分类Form1:表单     {         public int Count {get;组; }

    public Form1()
    {
        InitializeComponent();

        this.Count = 0;
    }

    private void GOBtn_Click(object sender, EventArgs e)
    {
        this.GOBtn.Enabled = false;

        this.Increment();

        this.GOBtn.Enabled = true;
    }

    public void Increment()
    {
        this.Count++;
        this.CountTxtBox.Text = this.Count.ToString();
        this.CountTxtBox.Refresh();

        Thread.Sleep(5000);  //long process

    }
}

答案 2 :(得分:0)

private bool HasBeenClicked = false;

private void button1_Click(object sender, EventArgs e)
    {
       if( HasBeenClicked )
          Application.DoEvents();
       else {
          HasBeenClicked = true;
          // Perform some actions here...
          }
    }

那应该做到这一点。 :O)