C# 是否在给定的持续时间内禁用所有窗体按钮?
我有一个C#格式的表单,它有4个按钮。我想在给定的时间后禁用所有4个按钮,例如在1或2分钟内。我在谷歌搜索并找到了以下代码,但它似乎不起作用:C# 是否在给定的持续时间内禁用所有窗体按钮?,c#,C#,我有一个C#格式的表单,它有4个按钮。我想在给定的时间后禁用所有4个按钮,例如在1或2分钟内。我在谷歌搜索并找到了以下代码,但它似乎不起作用: private System.Timers.Timer aTimer = new System.Timers.Timer(60) { AutoReset = false }; protected void Timer2_Tick(object sender, EventArgs e) { aTimer = new System.Timers.T
private System.Timers.Timer aTimer = new System.Timers.Timer(60) { AutoReset = false };
protected void Timer2_Tick(object sender, EventArgs e)
{
aTimer = new System.Timers.Timer(60);
aTimer.Interval = 60;
double counter = aTimer.Interval;
counter++;
if (counter >= 60)
{
lib_bt.Enabled = false;
MessageBox.Show("Time Up!");
}
tick方法将在您定义的时间间隔后执行。只需确保将
按钮.Enabled
设置为false
aTimer.Elapsed += new ElapsedEventHandler(OnTimedEvent);
private static void OnTimedEvent(object source, ElapsedEventArgs e)
{
lib_bt.Enabled = false;
MessageBox.Show("Time Up!");
button1.Enabled = false;
button2.Enabled = false;
button3.Enabled = false;
button4.Enabled = false;
}
button1
至button4
应替换为按钮名称
请注意:
- 间隔定义为毫秒。您的代码将每60毫秒执行一次。对于1分钟,您应将间隔设置为
60000
定义了两次。为什么?aTimer
按钮.Enabled
设置为false
aTimer.Elapsed += new ElapsedEventHandler(OnTimedEvent);
private static void OnTimedEvent(object source, ElapsedEventArgs e)
{
lib_bt.Enabled = false;
MessageBox.Show("Time Up!");
button1.Enabled = false;
button2.Enabled = false;
button3.Enabled = false;
button4.Enabled = false;
}
button1
至button4
应替换为按钮名称
请注意:
- 间隔定义为毫秒。您的代码将每60毫秒执行一次。对于1分钟,您应将间隔设置为
60000
定义了两次。为什么?aTimer
private static System.Timers.Timer myTimer;
public static void Main()
{
myTimer = new System.Timers.Timer(60000); // 60 seconds
myTimer.Elapsed += new ElapsedEventHandler(DisableButtons); // subscribe
myTimer.AutoReset = false; // if you don't want a reset
myTimer.Enabled = true; // enable it
}
// perform when event is fired off
private static void DisableButtons(object source, ElapsedEventArgs e)
{
button1.Enabled = false;
button2.Enabled = false;
button3.Enabled = false;
button4.Enbaled = false;
}
60秒==60000毫秒。。。。供参考 下面是它的外观:
private static System.Timers.Timer myTimer;
public static void Main()
{
myTimer = new System.Timers.Timer(60000); // 60 seconds
myTimer.Elapsed += new ElapsedEventHandler(DisableButtons); // subscribe
myTimer.AutoReset = false; // if you don't want a reset
myTimer.Enabled = true; // enable it
}
// perform when event is fired off
private static void DisableButtons(object source, ElapsedEventArgs e)
{
button1.Enabled = false;
button2.Enabled = false;
button3.Enabled = false;
button4.Enbaled = false;
}
我想在给定的时间后禁用所有4个按钮
我认为最简单的方法是使用C#5.0的async/await
只要在代码中的某个地方调用此方法,它就会在n秒后禁用按钮
我想在给定的时间后禁用所有4个按钮
我认为最简单的方法是使用C#5.0的async/await
只要在代码中的某个地方调用此方法,它将在n秒后禁用按钮。当计时器持续时间达到时,将触发勾号事件。无需检查计时器间隔。只需禁用其中的按钮-这应该是唯一的代码there@L.B根据代码判断,最有可能是WinForms。WPF按钮没有
.Enabled
属性;它是。我已启用
。事实上,它没有使用Dispatchermer
。但是,再一次,我认为他并不完全理解他正在使用的代码。我会使用Forms.Timer而不是System.Timers.Timer,这样你就不必调用按钮disable返回UI线程。当计时器持续时间达到时,勾号事件将触发。无需检查计时器间隔。只需禁用其中的按钮-这应该是唯一的代码there@L.B根据代码判断,最有可能是WinForms。WPF按钮没有.Enabled
属性;它是。我已启用
。事实上,它没有使用Dispatchermer
。但是,再说一遍,我认为他并不完全理解他正在使用的代码。我会使用Forms.Timer而不是System.Timers.Timer,这样你就不必调用按钮disable返回UI线程。@Ahmedilyas:你不需要。一旦您将Timer.Enabled
属性设置为true,代码将在定义的时间段后执行。对,但为了随后禁用按钮等…将触发一个事件…勾号事件…这就是您的代码的样子now@Ahmedilyas我不是写这篇评论的那个人。@Ahmedilyas:你不需要。一旦您将Timer.Enabled
属性设置为true,代码将在定义的时间段后执行。对,但为了随后禁用按钮等…将触发一个事件…勾号事件…这就是您的代码的样子now@Ahmedilyas我不是那个写评论的人。