【问题标题】:multiple remove checkedlistbox items多个删除checkedlistbox项目
【发布时间】:2023-03-20 14:02:02
【问题描述】:

嗨,在这个网站上,我发现了如何删除 checklistbox 中的多个复选框对象
How to delete multiple checked items from CheckedListBox?

但这对我不起作用。
我之前处理这个项目的合作伙伴在我之前在 Global.answer 类中保存了一些东西。我曾尝试像这样修改该脚本:

for (int i = checkedListBoxAnswers.Items.Count - 1; i >= 0; i--) {
    if (checkedListBoxAnswers.GetItemCheckState(i) == CheckState.Checked) 
    {
        Global.answers.RemoveAt(checkedListBoxAnswers.SelectedIndex);
    }
}

它可以正确删除一个复选框,但是当我检查两个或多个复选框时,它就出错了... 我想知道如何正确地做到这一点。

这是我的删除按钮

private void buttonDelete_Click(object sender, EventArgs e)
    {
        if (checkedListBoxAnswers.SelectedIndices.Count < 1)
        {
            MessageBox.Show(this, "Please select answer to be deleted");
        }
        else
        {
            for (int i = checkedListBoxAnswers.Items.Count - 1; i >= 0; i--)
            {
                if (checkedListBoxAnswers.GetItemCheckState(i) == CheckState.Checked)
                {
                    Global.answers.RemoveAt(checkedListBoxAnswers.SelectedIndex);
                }
            }
            updateCheckListBoxAnswers();
        }
    }

【问题讨论】:

  • 您有什么保证Global.answers 中的项目顺序与CheckedListBox 中的项目顺序一致?删除它们后,这对列表框有什么影响?我没有看到您从CheckedListBox 中删除任何内容。而且您使用SelectedIndex 反复删除,这不会在整个循环中改变。
  • @DonBoitnott 这很简单,因为如果我不包括 Global.answer....在我使用 Global.answer 的脚本中,我可以删除任何复选框,如果我检查了两个或更多复选框,它可以删除与选中相同的数量,但出错删除...我猜你是对的,selectedIndex 中的问题...如果你有解决它的想法,它会有所帮助
  • checkedListBoxAnswersGlobal.answers 中的项目是什么?它们中是否有任何唯一键可用于根据 checkedListBoxAnswers 而不是索引来识别 Global.answers 中的正确项目?
  • @DamirArh 我用几个关键字搜索...我在“checkedListBoxAnswer”和“Global.answer”之间找不到任何相关项目

标签: c# checkbox checkboxlist


【解决方案1】:

您正在删除一个对象,因此将该对象解析为整数 就这样

Convert.ToInt32(Object)

在你的情况下,它会是..

private void checkedListBox1_ItemCheck(object sender, ItemCheckEventArgs e)
{
if (e.NewValue == CheckState.Checked)
listBox1.Items.Add(checkedListBox1.Items[checkedListBox1.SelectedIndex]);
if (e.NewValue == CheckState.Unchecked)
   listBox1.Items.Remove(Convert.ToInt32(checkedListBox1.Items[checkedListBox1.SelectedIndex]));
}

【讨论】:

    【解决方案2】:

    你可以试试这个...

    Global.answers.RemoveAt(i);
    

    【讨论】:

    • 它的工作......我不知道它是否就这么简单
    【解决方案3】:

    兄弟,我有样品……你可以在你甜蜜的家中进化这个托盘……

    private void checkedListBox1_ItemCheck(object sender, ItemCheckEventArgs e)
    {
      if (e.NewValue == CheckState.Checked)
        listBox1.Items.Add(checkedListBox1.Items[checkedListBox1.SelectedIndex]);
      if (e.NewValue == CheckState.Unchecked)
        listBox1.Items.Remove(checkedListBox1.Items[checkedListBox1.SelectedIndex]);
    }
    

    【讨论】:

      【解决方案4】:

      因为你使用了这段代码

      Global.answers.RemoveAt(checkedListBoxAnswers.SelectedIndex);
      

      这将仅删除列表中选定的第一项,您必须传递选定的 Checked Item 的索引,因此它将仅删除该项目, 这是您从列表中获取所有选中项的方式:

      CheckedListBox.CheckedItemCollection checkedItemColl = checkedListBoxAnswers.CheckedItems;
      
              for (int i = checkedItemColl.Count; i > 0; i--)
              {
                  int index = checkedItemColl[i - 1];
                  checkedListBoxAnswers.Items.Remove(index);
      
              }
      

      移除 cmets 并测试代码。希望你能从中受益。

      【讨论】:

      • 我的意思是在“int x = checkedListBoxAnswers.Items[index];”中出错了can't can't 隐式地​​将类型'object'转换为'int'
      【解决方案5】:

      事实上这里是正确的代码:

       CheckedListBox.CheckedItemCollection checkedItemColl = checkedListBoxAnswers.CheckedItems;
      
                  for (int i = checkedItemColl.Count; i > 0; i--)
                  {
                      int index = checkedItemColl[i - 1];
                      checkedListBoxAnswers.Items.Remove(index);
      
                  }
      

      【讨论】:

      • 我不知道为什么,但我仍然遇到同样的错误...我尝试通过此代码转换它“checkedItemColl = Convert.ToInt32(checkedItemColl);”首先..但它给出了更多的错误
      • 我已经创建,测试然后发给你,你调试看看
      • 你能解释一下如何分块代码吗?我应该创建新的还是有什么方法可以从程序中分块确切的代码?
      • 哥们,你要删除的代码,我确定必须在 Button_Click 中。把那个发给我,也告诉我的参数类型
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-26
      • 2013-08-31
      相关资源
      最近更新 更多