从C#中的ListView中删除项目

问题描述 投票:4回答:6

我需要从ListView中删除项目,我要查找的代码将显示MessageBox以确认,如果没有选择项目,它将显示错误MessageBox

这是我的代码,它无法正常工作:(

private void button2_Click(object sender, EventArgs e)
{
    if (listView1.SelectedItems != null)
    {
        var confirmation = MessageBox.Show(
            "Voulez vous vraiment supprimer les stagiaires séléctionnés?",
            "Suppression", MessageBoxButtons.YesNo, MessageBoxIcon.Question
        );

        if (confirmation == DialogResult.Yes)
        {
            for (int i = 0; i < listView1.Items.Count; i++)
            {
                if (listView1.Items[i].Selected)
                {
                    listView1.Items[i].Remove();
                    i--;
                }
            }
        }
    }
    else
    {
        MessageBox.Show("aucin stagiaire selectionnes", "erreur",
            MessageBoxButtons.OK, MessageBoxIcon.Error);
    }
}

错误不在删除,但在MessageBox's我有两个MessageBox's,错误必须首先显示确认之前。

c# listview
6个回答
9
投票

从最后开始计数到零

for (int i = listView1.Items.Count - 1; i >= 0; i--)
{
    if (listView1.Items[i].Selected)
    {
        listView1.Items[i].Remove();
    }
}

但是请考虑每个ListViewItem都有一个Index属性,并且使用该集合有利于避免冗余测试并在较少数量的项上循环。

(注意,SelectedItems集合永远不会为null,如果不存在选择,则集合为空但不为null)

所以你的代码可以被重写

if (listView1.SelectedItems.Count > 0)
{
    var confirmation = MessageBox.Show("Voulez vous vraiment supprimer les stagiaires séléctionnés?", "Suppression", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
    if (confirmation == DialogResult.Yes)
    {
        for (int i = listView1.SelectedItems.Count - 1; i >= 0; i--)
        {
            ListViewItem itm = listView1.SelectedItems[i];
            listView1.Items[itm.Index].Remove();
        }
    }
}
else
    MessageBox.Show("aucin stagiaire selectionnes", ...);

2
投票

您不应该在迭代期间引用您正在使用的原始集合,但是其他一些:

foreach(ListViewItem item in listView1.Items)
   if (item.Selected)
     listView1.Items.Remove(item);

0
投票

你可以使用这个代码而不用 - 减少

listView1.Items[i].Remove();

注意:您也可以通过指定位置来使用qazxsw poi


0
投票

您可以像这样更改代码。请注意,RemoteAt method集合包含所选ListView.SelectedIndices的索引。只需从头到尾迭代它们,你就不需要处理索引更新,而是将它们留给ListViewItems循环:

for

0
投票

您需要将您的确认 if (listView1.SelectedIndices.Count>0) { var confirmation = MessageBox.Show("Voulez vous vraiment supprimer les stagiaires séléctionnés?", "Suppression", MessageBoxButtons.YesNo, MessageBoxIcon.Question); if (confirmation == DialogResult.Yes) { for (int i = listView1.SelectedIndices.Count-1; i >= 0; i--) { listView1.Items.RemoveAt(listView1.SelectedIndices[i]); } } } else MessageBox.Show("aucin stagiaire selectionnes", "erreur", MessageBoxButtons.OK, MessageBoxIcon.Error); MessageBox更改为Show。这将使其成为模态并等待结果。

您需要在“SelectedItems”上检查空


0
投票
ShowDialog
© www.soinside.com 2019 - 2024. All rights reserved.