创建复选框检查序列

本文关键字:检查 复选框 创建 | 更新日期: 2023-09-27 18:33:12

您好,我正在尝试对一些复选框进行编程,以便以编程方式按特定顺序选中和取消选中。我知道这听起来很愚蠢,但这对应于我已经为其编码检查事件的一些 LED 控件。

我想选中一个复选框以启动此序列并取消选中它以停止它。目前,我的 D2 复选框的检查和取消选中发生正常,但 do while 循环冻结了表单,因此我实际上无法取消选中循环框。我可能也不应该使用Thread.Sleep。任何建议不胜感激。

private void cycleCheckBox_CheckedChanged(object sender, EventArgs e)
        {
            do
            {
                D2.Checked = true;
                Thread.Sleep(1000);
                D2.Checked = false;
                Thread.Sleep(1000);    
            } while (cycleCheckBox.Checked);
        }

创建复选框检查序列

如果在检查事件中直接调用,Thread.Sleep 方法将在 UI 线程上运行,这就是 UI 冻结的原因。将工作推送到 System.Windows.Forms.Timer 中(假设这是一个 WinForms 应用程序):

实现按用户定义的时间间隔引发事件的计时器。 此计时器针对在 Windows 窗体应用程序中使用进行了优化,并且必须 在窗口中使用。

根据您的问题示例:

Timer _timer;
private void cycleCheckBox_CheckedChanged(object sender, EventArgs e)
{
    if(_timer == null )
    {
        _timer = new Timer();
        _timer.Interval = 1000; // 1 second
        _timer.Tick += DoTimerWork;
    }
    if(cycleCheckBox.Checked)
    {
        _timer.Start();
    }
    else
    {
        _timer.Stop();
    }
}
private void DoTimerWork(object obj, EventArgs args) 
{
    D2.Checked = !D2.Checked;
}

我不知道这是否适合您,但我要做的是在 1000 毫秒处拖动计时器控件,并使用一种方法来确定当前应该使用整数选中哪个复选框在某个点循环到 0 并在每次刻度时递增。