我需要从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
,必须在确认之前先显示错误。
答案 0 :(得分: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", ...);
答案 1 :(得分:2)
您不应该在迭代期间引用您正在使用的原始集合,而是引用其他一些:
foreach(ListViewItem item in listView1.Items)
if (item.Selected)
listView1.Items.Remove(item);
答案 2 :(得分:0)
您可以在不使用 - 减少
的情况下使用此代码listView1.Items[i].Remove();
注意:您也可以通过指定位置
来使用RemoteAt method
答案 3 :(得分:0)
您需要将确认MessageBox
从Show
更改为ShowDialog
。这将使其成为模态并等待结果。
您需要在“SelectedItems”
上检查emptry答案 4 :(得分:0)
您可以像这样更改代码。请注意,ListView.SelectedIndices
集合包含所选ListViewItems
的索引。只需从头到尾迭代它们,您就不需要处理索引更新,而是将它们留给for
循环:
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);
答案 5 :(得分:0)
//if (lvPhotos.SelectedIndices.Count > 0)
if (lvPhotos.CheckedIndices.Count > 0)
{
var confirmation = MessageBox.Show("Supprimer les photos séléctionnées ?", "Confirmation", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
if (confirmation == DialogResult.Yes)
{
// selected
//for (int i = lvPhotos.SelectedIndices.Count - 1; i >= 0; i--)
//{
// lvPhotos.Items.RemoveAt(lvPhotos.SelectedIndices[i]);
//}
// checked
for (int i = lvPhotos.CheckedIndices.Count - 1; i >= 0; i--)
{
lvPhotos.Items.RemoveAt(lvPhotos.CheckedIndices[i]);
}
}
}