If one checkbox is checked, set the other to unchecked

前端 未结 9 1653
Happy的楠姐
Happy的楠姐 2021-01-13 10:06

I have two checkboxes on my form; chkBuried and chkAboveGround. I want to set it up so if one is checked, the other is unchecked. How can I

相关标签:
9条回答
  • 2021-01-13 10:55

    The reason for the behavior you have explained is that you are using CheckedChanged event, which means that when you are setting the Checked property of a CheckBox manually, the event is also fired, causing another box to react again.

    Therefore, the following might help you:

    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;
        }
    }
    

    UPDATE 29.03.2020: functionally the code in my answer is the same as the answer given by Riz. Nevertheless, I am leaving the code as I put it originally since it might make the whole situation easier to understand for the people who are new to coding. If you are to implement anything similar in production code, please use the answer by Riz as an example.

    0 讨论(0)
  • 2021-01-13 10:55
    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;
     }
    }
    

    However I would suggest radio boxes as well. The code above is untested and may have some typos

    0 讨论(0)
  • 2021-01-13 10:57

    This will work for two unchecked boxes, since they are already unchecked it is simpler.
    I had to do this myself also.

    private void customer_IsCheckedChanged(object sender, EventArgs e)
    {
        business.IsChecked = false;
    }
    
    private void business_IsCheckedChanged(object sender, EventArgs e)
    {
        customer.IsChecked = false;
    }
    
    0 讨论(0)
提交回复
热议问题