3 回答
TA贡献1863条经验 获得超2个赞
简答
从您发布的代码来看,您实际上只需要更改代码以禁用事件中的复选框并在CheckChanged事件中启用它timer1_Tick(以及事件Stop中的计时器Tick)。
完整答案
Winforms 有一个Timer可以用于此的控件。将 aTimer放到设计器上后,将Interval属性设置为启用复选框之前要等待的毫秒数(1秒是1000毫秒,所以 15 分钟是15min * 60sec/min * 1000ms/sec,或900,000ms)。然后双击它以创建Tick事件处理程序(或在您的事件中添加一个,Form_Load如下所示)。
接下来,CheckChanged如果未选中该复选框,则禁用该复选框并启动计时器。
然后,在Tick事件中,只需启用复选框(请记住,此事件在经过毫秒后触发Interval)并停止计时器。
例如:
private void Form1_Load(object sender, EventArgs e)
{
// These could also be done in through designer & property window instead
timer1.Tick += timer1_Tick; // Hook up the Tick event
timer1.Interval = (int) TimeSpan.FromMinutes(15).TotalMilliseconds; // Set the Interval
}
private void timer1_Tick(object sender, EventArgs e)
{
// When the Interval amount of time has elapsed, enable the checkbox and stop the timer
checkBox1.Enabled = true;
timer1.Stop();
}
private void checkBox1_CheckedChanged(object sender, EventArgs e)
{
if (!checkBox1.Checked)
{
// When the checkbox is unchecked, disable it and start the timer
checkBox1.Enabled = false;
timer1.Start();
}
}
TA贡献1810条经验 获得超4个赞
这可以在不Timer显式使用的情况下完成。而是使用异步Task.Delay,这将简化代码并使其易于理解实际/领域意图。
// Create extension method for better readability
public class ControlExtensions
{
public static Task DisableForSeconds(int seconds)
{
control.Enabled = false;
await Task.Delay(seconds * 1000);
control.Enabled = true;
}
}
private void checkBox1_CheckStateChanged(object sender, EventArgs e)
{
var checkbox = (CheckBox)sender;
if (checkbox.Checked)
{
checkbox.Text = "On";
picturebox1.Show();
pictureBox5.Hide();
}
else
{
checkbox.Text = "Off";
checkbox.DisableForSeconds(15 * 60);
pictureBox1.Hide();
pictureBox5.Show();
}
}
- 3 回答
- 0 关注
- 145 浏览
添加回答
举报