首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将不确定的CheckBox更改为检查而不是未检查?

如何将不确定的CheckBox更改为检查而不是未检查?
EN

Stack Overflow用户
提问于 2016-10-29 21:00:59
回答 3查看 3.8K关注 0票数 1

我有一个设置为CheckBoxCheckState.Indeterminate。当计时器过期时,它将被设置为CheckState.Unchecked并关闭外部输出信号。到目前一切尚好。

使用当前代码,当用户单击Indeterminate CheckBox时,它将成为一个Unchecked CheckBox。我想拦截它并使它成为Checked CheckBox

用户的效果将是取消计时器并保持输出打开,直到用户取消复选框,或者用户启动一个独立的进程来接管并再次设置不确定的CheckBox` `。

实际上,他关闭了输出,必须再次显式地打开它。

我尝试了验证事件,但直到我离开盒子才会发生这种情况。

更新1:以澄清用户希望看到的内容。当灯关灯时,盒子总是不加检查。

当系统的自动部分运行时,灯就亮了。如果用户查看控件,它处于不确定状态,因为用户没有激活它,但它是打开的。

当进程停止时,一个计时器就会启动,让灯亮2分钟。在此期间,用户仍然会看到不确定的状态。

如果用户需要保持亮着,他将选中复选框,删除不确定状态。当他通过时,他将手动取消复选框,关闭灯或重新启动自动过程,这将使它再次不确定。

我不知道AutoCheck属性

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-10-30 09:59:33

没有必要采取任何激烈的措施,您只是不喜欢复选框实现其AutoCheck属性的方式。因此,选择该控件并将其AutoCheck属性设置为False。让我们以你想要的方式控制支票状态。

添加Click事件处理程序,允许用户将状态从不确定状态直接翻转到用鼠标单击或空格键按下检查:

代码语言:javascript
复制
    private void checkBox1_Click(object sender, EventArgs e) {
        checkBox1.CheckState = checkBox1.CheckState == CheckState.Checked ?
            CheckState.Unchecked : CheckState.Checked;
    }
票数 4
EN

Stack Overflow用户

发布于 2016-10-29 21:50:42

我建议不要更改标准控件的行为,但是如果这是您所需要的,您可以子类CheckBox并重写Onclick方法。

是您可以看到标准行为的地方。

您所需要做的就是重新处理开关语句中的逻辑并调用基。我们需要通过将AutoCheck设置为false来抑制基的校验状态逻辑,然后将其恢复到以前的值:

代码语言:javascript
复制
public class MyCheckBox : CheckBox
{
    protected override void OnClick(EventArgs e)
    {
        if (AutoCheck)
            switch (CheckState)
            {
                case CheckState.Indeterminate:
                    CheckState = CheckState.Checked;
                    break;
                case CheckState.Unchecked:
                    if (ThreeState)
                    {
                        CheckState = CheckState.Indeterminate;
                    }
                    else
                    {
                        CheckState = CheckState.Checked;
                    }
                    break;
                default:
                    CheckState = CheckState.Unchecked;
                    break;
            }

        var oldAutoCheckValue = AutoCheck;
        AutoCheck = false;
        base.OnClick(e);
        AutoCheck = oldAutoCheckValue;
    }
}

作为另一种解决方案,您应该考虑使用单选按钮来改进UX。

票数 2
EN

Stack Overflow用户

发布于 2016-10-29 21:48:59

我想你需要CheckStateChanged活动。

试试这个,让我知道:

代码语言:javascript
复制
//mark the process as running (check box is Indeterminate state)
private bool processIsRunning = true;

private void chkState_CheckStateChanged(object sender, EventArgs e)
{
    //the user clicks the indeterminate checkbox
    if (processIsRunning && chkState.CheckState == CheckState.Unchecked)
    {
        processIsRunning = false;
        chkState.CheckState = CheckState.Checked;
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40323634

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档