如果选中一个复选框,则将另一个设置为未选中

时间:2014-03-13 02:07:13

标签: c# winforms checkbox

我的表单上有两个复选框; chkBuriedchkAboveGround我想设置它,如果选中一个,则另一个未选中。我该怎么做?

我尝试了CheckChanged属性:

private void chkBuried_CheckedChanged(object sender, EventArgs e)
{
    chkAboveGround.Checked = false;
}
private void chkAboveGround_CheckedChanged(object sender, EventArgs e)
{
    chkBuried.Checked = false;
}

它有效,但不如我希望的那么好。也就是说,当我选中chkBuried,然后检查chkAboveGround时,两个框都会取消选中,然后我才能再次检查另一个。

9 个答案:

答案 0 :(得分:10)

修改您的代码,如下所示。

private void chkBuried_CheckedChanged(object sender, EventArgs e)
{
    chkAboveGround.Checked = !chkBuried.Checked;
}
private void chkAboveGround_CheckedChanged(object sender, EventArgs e)
{
    chkBuried.Checked = !chkAboveGround.Checked;
}

答案 1 :(得分:4)

我建议您使用check_click而不是check_changed

        private void checkBox1_Click(object sender, EventArgs e)
        {
            checkBox2.Checked = false;
            checkBox3.Checked = false;
        }

        private void checkBox2_Click(object sender, EventArgs e)
        {
            checkBox1.Checked = false;
            checkBox3.Checked = false;
        }

        private void checkBox3_Click(object sender, EventArgs e)
        {
            checkBox1.Checked = false;
            checkBox2.Checked = false;
        }

答案 2 :(得分:1)

您解释的行为的原因是您正在使用CheckedChanged事件,这意味着当您手动设置CheckBox的Checked属性时,该事件也会被触发,从而导致另一个事件箱子再做出反应。

因此,以下内容可能会对您有所帮助:

private void chkBuried_CheckedChanged(object sender, EventArgs e)
{
    if(chkBuried.Checked == true) {
        chkAboveGround.Checked = false;
    } else {
        chkAboveGround.Checked = true;
    }
}

private void chkAboveGround_CheckedChanged(object sender, EventArgs e)
{
    if(chkAboveGround.Checked == true) {
        chkBuried.Checked = false;
    } else {
        chkBuried.Checked = true;
    }
}

答案 3 :(得分:0)

我更喜欢单选按钮,但您可以这样做:

public void CheckACheckBox(Checkbox ck)
{
    foreach (Control ckb in this.Controls)
    {
       if ((ckb is CheckBox) && (ckb == ck))
          ck.Checked = true;
       else
          ck.Checked = false;
    }
}

答案 4 :(得分:0)

List<CheckBox> groupOfCheckBoxes = new List<CheckBox>();
void InitFunction() {
    groupOfCheckBoxes.Add(checkbox1);
    groupOfCheckBoxes.Add(checkbox2);
    groupOfCheckBoxes.Add(checkbox3);
    foreach (CheckBox cb in groupOfCheckBoxes)
     cb.Click += checkbox_Click
}
void checkbox_Click(object sender, EventArgs e) 
{
 foreach (CheckBox cb in groupOfCheckBoxes) {
  cb.IsChecked = cb == sender;
 }
}

但我也建议使用收音机盒。 上面的代码未经测试,可能有一些拼写错误

答案 5 :(得分:0)

更好的版本,允许用户取消选中框。

        private void chkOne_CheckedChanged(object sender, EventArgs e)
        {
            if (chkTwo.Checked == true)
            {
                chkTwo.Checked = !chkOne.Checked;
            }
        }

        private void chkTwo_CheckedChanged(object sender, EventArgs e)
        {
            if (chkOne.Checked == true)
            {
                chkOne.Checked = !chkTwo.Checked;
            }
        }

答案 6 :(得分:0)

对我来说,最好的选择和最简单的方法是创建Click事件而不是CheckedChanged事件。 此方法与两个或多个复选框完美配合,允许全部取消选中。

    private void chkOne_Click(object sender, EventArgs e)
    {
        chkTwo.Checked = false;
    }

    private void chkTwo_Click(object sender, EventArgs e)
    {
        chkOne.Checked = false;
    }

答案 7 :(得分:0)

这将适用于两个未选中的框,因为它们已经被选中,因此更简单。
我也必须自己做。

private void customer_IsCheckedChanged(object sender, EventArgs e)
{
    business.IsChecked = false;
}

private void business_IsCheckedChanged(object sender, EventArgs e)
{
    customer.IsChecked = false;
}

答案 8 :(得分:0)

在激活CheckBox时,我需要显示或不显示表格,它们是两个如何显示,如果我都激活了,一切都很好,但是如果以后尝试停用一个,则另一个也会被停用。 PD:我使用的表的默认值为Visible = false。我得到的解决方案如下:

 protected void YourNameOfMethodForBothCheckBox(object sender, EventArgs e)
    {
        if (CheckBox_1.Checked == true)
        {
            Table_1.Visible = true;

            if (CheckBox_2.Checked == true)
            {
                Table_2.Visible = true;
            }
            else { Table_2.Visible = false; }


        }
        else
        {
            Table_1.Visible = false;

            if (CheckBox_2.Checked == false)
            {
                Table_2.Visible = false;
            }
            else
            {
                Table_2.Visible = true;

            }
        }

    }