Visual Studio C#-如何选中两个(或更多)复选框,禁用其余复选框?

Visual Studio C#-如何选中两个(或更多)复选框,禁用其余复选框?,c#,checkbox,foreach,C#,Checkbox,Foreach,我有下面的代码,允许在一个groupbox中只选中一个复选框,禁用其他复选框,并在未选中时重新启用 private void chkBox_CheckedChanged(object sender, EventArgs e) { CheckBox tmp = (CheckBox)sender; bool tmpStatus = tmp.Checked; foreach (CheckBox chk in this.Controls.OfType<CheckBox>

我有下面的代码,允许在一个groupbox中只选中一个复选框,禁用其他复选框,并在未选中时重新启用

private void chkBox_CheckedChanged(object sender, EventArgs e)
{
    CheckBox tmp = (CheckBox)sender;
    bool tmpStatus = tmp.Checked;
    foreach (CheckBox chk in this.Controls.OfType<CheckBox>())
    {
        if (tmp.Checked)
        {
            chk.Enabled = false;
            tmp.Enabled = tmpStatus;
        }
        else
        {
            chk.Enabled = true;
            tmp.Enabled = true;
        }
    }
}
private void chkBox\u CheckedChanged(对象发送方,事件参数e)
{
复选框tmp=(复选框)发送方;
bool tmpStatus=tmp.已检查;
foreach(this.Controls.OfType()中的复选框chk)
{
如果(tmp检查)
{
chk.Enabled=false;
tmp.Enabled=tmpStatus;
}
其他的
{
chk.Enabled=true;
tmp.Enabled=true;
}
}
}

如果选中我的groupbox中的两个复选框,使其他复选框处于禁用状态,并在至少一个或多个复选框处于未选中状态时重新启用,我将如何使其处于启用状态。int变量会有帮助吗?如果是这样的话,我如何让它工作,因为我一直在尝试,但我无法让它工作。

您是否尝试过使用GroupBox(在容器菜单中)?让你也这么做吧。。。它就像一个可以放置单选按钮或复选框的面板,它们都是逻辑链接的,因此您可以自定义它,使其像MCQ类型的函数或任何您想要的功能一样。。。
这里有一个我希望对您有所帮助的链接:

您是否尝试过使用GroupBox(在容器菜单中)?让你也这么做吧。。。它就像一个可以放置单选按钮或复选框的面板,它们都是逻辑链接的,因此您可以自定义它,使其像MCQ类型的函数或任何您想要的功能一样。。。 这里有一个我希望能帮助你的链接:

试试这个

var checkedControls = this.Controls.OfType<CheckBox>()
                                   .Where(chk => chk.Checked == true);

var uncheckedControls = this.Controls.OfType<CheckBox>()
                                     .Where(chk => chk.Checked == false);

if(checkedControls.Count() > 1)
{
    foreach (CheckBox chkBox in uncheckedControls) chkBox.Enabled = false;
}
else
{
    foreach (CheckBox chkBox in uncheckedControls) chkBox.Enabled = true;
}
var checkedControls=this.Controls.OfType()
.Where(chk=>chk.Checked==true);
var uncheckedControls=this.Controls.OfType()
其中(chk=>chk.Checked==false);
如果(checkedControls.Count()>1)
{
foreach(未选中控件中的复选框chkBox)chkBox.Enabled=false;
}
其他的
{
foreach(未选中控件中的复选框chkBox)chkBox.Enabled=true;
}
试试这个

var checkedControls = this.Controls.OfType<CheckBox>()
                                   .Where(chk => chk.Checked == true);

var uncheckedControls = this.Controls.OfType<CheckBox>()
                                     .Where(chk => chk.Checked == false);

if(checkedControls.Count() > 1)
{
    foreach (CheckBox chkBox in uncheckedControls) chkBox.Enabled = false;
}
else
{
    foreach (CheckBox chkBox in uncheckedControls) chkBox.Enabled = true;
}
var checkedControls=this.Controls.OfType()
.Where(chk=>chk.Checked==true);
var uncheckedControls=this.Controls.OfType()
其中(chk=>chk.Checked==false);
如果(checkedControls.Count()>1)
{
foreach(未选中控件中的复选框chkBox)chkBox.Enabled=false;
}
其他的
{
foreach(未选中控件中的复选框chkBox)chkBox.Enabled=true;
}

与Aydin的答案相似,但略短:

    private void chk(object sender, EventArgs e)
    {
        // Make a list of all checkboxes.
        var checkboxes = this.Controls.OfType<CheckBox>().ToList();
        // Count how many are checked.
        int numberChecked = checkboxes.Where(x => x.Checked).ToList().Count;
        foreach (var cb in checkboxes)
        {
            cb.Enabled = numberChecked < 2 || cb.Checked;
        }
    }
private void chk(对象发送方,事件参数e)
{
//列出所有复选框。
var复选框=this.Controls.OfType().ToList();
//数一数检查了多少。
int numberChecked=复选框。其中(x=>x.Checked)。ToList().Count;
foreach(复选框中的var cb)
{
cb.Enabled=数字检查<2 | | cb.Checked;
}
}

与Aydin的答案相似,但略短:

    private void chk(object sender, EventArgs e)
    {
        // Make a list of all checkboxes.
        var checkboxes = this.Controls.OfType<CheckBox>().ToList();
        // Count how many are checked.
        int numberChecked = checkboxes.Where(x => x.Checked).ToList().Count;
        foreach (var cb in checkboxes)
        {
            cb.Enabled = numberChecked < 2 || cb.Checked;
        }
    }
private void chk(对象发送方,事件参数e)
{
//列出所有复选框。
var复选框=this.Controls.OfType().ToList();
//数一数检查了多少。
int numberChecked=复选框。其中(x=>x.Checked)。ToList().Count;
foreach(复选框中的var cb)
{
cb.Enabled=数字检查<2 | | cb.Checked;
}
}

您在最后一个问题上得到了很好的答案。与问更多的问题相比,也许你应该更完善你的编码技能。在你问的最后一个问题上,你得到了一个很好的答案。与问更多的问题相比,也许你应该进一步完善你的编码技能。这不是关于取消选择其他复选框,或者询问使用启用/禁用付款。这不是关于取消选择其他复选框,或者询问使用启用/禁用付款。阅读问题,这不是关于翻转启用/禁用的问题。@HariPrasad也许你应该再读一遍我的答案
“如果我的groupbox中有两个复选框被选中,我怎么能做到这一点”
这有点让人困惑,但如果我们仔细阅读
“如果我的groupbox中有两个复选框被选中,我怎么能做到这一点”
这是一句话,接下来,OP要求在满足上述情况时禁用所有复选框。@HariPrasad这正是发生的情况。。。如果选中了2个复选框控件,则遍历未选中的控件并禁用它们。。。否则,启用它们。他并没有说禁用所有这些,只有那些没有被检查的。如果你阅读他的代码,你会看到他首先禁用所有,然后重新启用选中的一个,标题是“如何让两个(或更多)复选框被选中,其余被禁用?”:-)阅读问题,这不是关于翻转启用/禁用。@HariPrasad也许你应该第二次阅读我的答案
“如果我的groupbox中有两个复选框被选中,我怎么能做到这一点”
这有点让人困惑,但如果我们仔细阅读
“如果我的groupbox中有两个复选框被选中,我怎么能做到这一点”
这是一句话,接下来,OP要求在满足上述情况时禁用所有复选框。@HariPrasad这正是发生的情况。。。如果选中了2个复选框控件,则遍历未选中的控件并禁用它们。。。否则,启用它们。他并没有说禁用所有这些,只有那些没有被检查的。如果你阅读他的代码,你会看到他首先禁用所有,然后重新启用选中的复选框,标题是“如何让两个(或更多)复选框被选中,其余被禁用?”:-)这一个工作得很好,出于某种原因,Aydin的解决方案不起作用。非常感谢您,您和Aydin帮了我很大的忙。我本应该签入编译器,但我不能被要求创建一个测试项目:),很高兴helped@jgfoot有些部分你可以改变以进一步改进