多个删除checkedlistbox项目

时间:2014-01-17 04:07:20

标签: c# checkbox checkboxlist

您好,在这个网站上,我找到了如何删除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();
        }
    }

5 个答案:

答案 0 :(得分:3)

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

 CheckedListBox.CheckedItemCollection checkedItemColl = checkedListBoxAnswers.CheckedItems;

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

            }

答案 1 :(得分:2)

因为您使用此代码

Global.answers.RemoveAt(checkedListBoxAnswers.SelectedIndex);

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

CheckedListBox.CheckedItemCollection checkedItemColl = checkedListBoxAnswers.CheckedItems;

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

        }

删除评论并测试代码。希望你能从中受益。

答案 2 :(得分:1)

兄弟我有样品......你可以在甜蜜的家里养成托盘......

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

答案 3 :(得分:1)

你可以试试这个......

Global.answers.RemoveAt(i);

答案 4 :(得分: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]));
}