使用 Linq 取消选中所有复选框

Uncheck all CheckBoxes using Linq

我有三个复选框,选择后可以在列表框中输入一个条目(见下文)。当我想更改复选框的状态(未选中)时,如何再次从列表框中删除条目?非常感谢您的帮助!

private CheckBox[] checkboxes;
private string[] cbx;

checkboxes = new[] {checkBox1, checkBox2, checkBox3};

checkBox1.Tag =  "string1"; 
checkBox2.Tag =  "string2";
checkBox3.Tag =  "string3"; 

foreach (var checky in checkboxes)
{
   checky.CheckedChanged += CheckBox_CheckedChanged;
}

private void CheckBox_CheckedChanged(object sender, EventArgs e)
{
   cbx = checkboxes.Where(checky => checky.Checked)
  .Select(checky => checky.Tag)
  .Cast<string>()
  .ToArray();

  listBox4.Items.AddRange(cbx);

 }





执行此操作的一种方法是在将选中的项目添加到列表框之前删除列表框中的所有内容:

private void CheckBox_CheckedChanged(object sender, EventArgs e)
{
    cbx = checkboxes.Where(checky => checky.Checked)
        .Select(checky => checky.Tag)
        .Cast<string>()
        .ToArray();

    listBox4.Items.Clear(); // here!
    listBox4.Items.AddRange(cbx);
}

只要任何复选框被选中,您就可以删除列表框中的所有内容,无论它们是否被选中。然后你得到当前选中的项目并将它们添加到列表框中。