假设您在表单上有一个按钮,在文本框中计数为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);
}
答案 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)