想要一个按钮在点击后禁用30秒,并自动启用它

问题描述:

我在一个项目上,这个项目需要从random.org随机抽取16个字节。我可以从网站上取得这个16字节的文本。我也有一个刷新按钮。每次点击这个按钮,新的16字节出现,并且它被写入textedit。想要一个按钮在点击后禁用30秒,并自动启用它

我想阻止用户按顺序点击刷新按钮。我想要的是在点击后禁用刷新按钮。但是,我想要的另一件事是自动启用此按钮30秒后。

我试过thread.sleep(30000)在按钮点击事件,但它停止整个程序30秒。我想在30秒内禁用刷新按钮,而不是其他程序。

我想向用户展示一种秒表,以便他们可以看到他们应该等待下一次点击多少时间。例如,点击刷新按钮后,出现这个30秒秒表。

+0

尝试使用定时器控制 – Jade

+1

您可以开始研究[Thread](http://msdn.microsoft.com/zh-cn/library/aa645740(v = vs.71).aspx),man。 – albusshin

+0

计时器或BackgroundWorker – Paparazzi

尝试这样:

System.Windows.Forms.Timer timer = new System.Windows.Forms.Timer(); 
private void button1_Click(object sender, EventArgs e) // event handler of your button 
{     
    timer.Interval = 30000; // here time in milliseconds 
    timer.Tick += timer_Tick; 
    timer.Start(); 
    button1.Enabled = false; 

    // place get random code here 
} 

void timer_Tick(object sender, System.EventArgs e) 
{ 
    button1.Enabled = true; 
    timer.Stop(); 
} 
+0

谢谢,这正是我想要的。 –

尝试使用计时器并在打勾后启用按钮。 欲了解更多信息:http://www.dotnetperls.com/timer

System.Windows.Forms.Timer timer1 = new System.Windows.Forms.Timer(); 
timer1.Interval=1000;//one second 
timer1.Tick += new System.EventHandler(timer1_Tick); 
timer1.Start(); 
int count=30; 
private void timer1_Tick(object sender, EventArgs e) 
{ 
    if(count!=0) 
    { 
    button1.Enabled=false; 
    label1.Text = count.ToString() +" seconds more to Enable Refresh Button"; 
    count--; 
    } 
    else 
    { 
    button1.Enabled=true; 
    timer1.Stop(); 
    } 

} 

使用定时器 有一个片段创建计时器 http://dotnet-snippets.de/snippet/timer-anlegen/111

上点击按钮关闭按钮,并开始计时。在Tick中启用按钮并停止计时器。

如果我们在这里所说的WPF,有一种方法可以实现与EventTriggers所期望的行为,没有任何后台代码:

<Style TargetType="Button"> 

     <Style.Triggers> 

      <EventTrigger RoutedEvent="Button.Click"> 

       <EventTrigger.Actions> 

        <BeginStoryboard> 

         <Storyboard> 

          <BooleanAnimationUsingKeyFrames Storyboard.TargetProperty="IsEnabled"> 

           <DiscreteBooleanKeyFrame KeyTime="00:00:00" Value="False" /> 

           <DiscreteBooleanKeyFrame KeyTime="00:00:30" Value="True" /> 

          </BooleanAnimationUsingKeyFrames> 

         </Storyboard> 

        </BeginStoryboard> 

       </EventTrigger.Actions> 

      </EventTrigger> 

     </Style.Triggers> 

    </Style> 
+1

不错的优雅解决方案,没有代码隐藏。完善。 – Webreaper