【问题标题】:Remove something added by a particular event - c#删除特定事件添加的内容 - c#
【发布时间】:2015-05-07 18:38:08
【问题描述】:

我有一段代码可以在选中复选框时将组合框的选定项添加到列表框中。当复选框未选中时,我想删除要从列表框中删除的选定项目。

我的问题是我不能简单地重复删除代码与添加相同,因为未选中时组合框选择会不同或为空。

这是它目前的样子:

private void CBwasher_CheckedChanged(object sender, EventArgs e)
{
     if (checkBox1.Checked == true)
     {
          listBox2.Items.Add(comboBox1.SelectedItem);
     }
     if (checkBox1.Checked == false)
     {
         listBox2.Items.Remove(comboBox1.SelectedItem);
     }

所以我需要一种方法来删除该检查更改添加的任何内容,而不是删除组合框的选定索引。请考虑列表框中可能有多个不同复选框添加的多行。

【问题讨论】:

    标签: c# visual-studio-2010 checkbox combobox listbox


    【解决方案1】:

    您只需要存储添加的项目并将其删除。

    private object addedItem;
    private void CBwasher_CheckedChanged(object sender, EventArgs e)
    {
         if (checkBox1.Checked)
         {
              addedItem = comboBox1.SelectedItem;
              listBox2.Items.Add(addedItem);
         }
         else
         {
             listBox2.Items.Remove(addedItem);
         }
    }
    

    在添加/删除项目之前,您可能还需要检查 SelectedItem 是否为空。

    【讨论】:

    • 顺便说一句,你可以写 if(checkBox1.Checked){....} 没有 "== true" ,只是说:)
    • @Ashur451 叹息。我怎么错过了:?谢谢
    • 你在哪里写addedItem,你的意思是实际将添加的项目写入代码还是任何添加的项目,因为我得到“找不到类型或命名空间“addItem””
    • 我想念你在顶部关于私有对象的行,我现在理解并管理了我想要的,但它似乎只适用于 1 个复选框,如果我使用超过 1 个它不会
    • @JoeGoddard 多个复选框是什么意思?你是怎么用的?
    【解决方案2】:

    专注于您所说的可能有多个不同复选框的部分, 您需要为每个复选框存储一项。

    您可以编写自己的复选框控件的子类来添加此功能,或者直接使用 Tag 属性。 您还可以以相同的方式指示哪个复选框链接到哪个组合框。子类或使用 Tag 属性。

    在我的示例中,我假设您已经使用 Tag 属性从复选框中引用了组合框。 你可以像这样手动完成

    checkBox1.Tag = comboBox1;
    

    或者,如果您正在动态生成这些,希望您可以将其自动化。

    这里是复选框事件外观的大致思路。 该事件正在使用 sender 参数,这意味着您应该将所有复选框 CheckedChanged 事件连接到这个处理程序。无需为每个处理程序创建单独的处理程序。

    private void CBwasher_CheckedChanged(object sender, EventArgs e)
    {
         var checkBox = (CheckBox)sender;
         var comboBox = (ComboBox)checkBox.Tag;
         if (checkBox.Checked && comboBox.SelectedItem != null)
         {
              listBox2.Items.Add(comboBox.SelectedItem);
              comboBox.Tag = comboBox.SelectedItem;
         }
         if (!checkBox.Checked && comboBox.Tag != null)
         {
             listBox2.Items.Remove(comboBox.Tag);
         }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-08-29
      • 2012-02-17
      • 1970-01-01
      • 2010-11-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-30
      相关资源
      最近更新 更多