C# 在C中从ListView中删除项#
我需要从C# 在C中从ListView中删除项#,c#,listview,C#,Listview,我需要从列表视图中删除项目,我要查找的代码将显示一个消息框进行确认,如果未选择任何项目,则将显示一个错误消息框 这是我的代码,它不起作用:( private void按钮2\u单击(对象发送者,事件参数e) { 如果(listView1.SelectedItems!=null) { var confirmation=MessageBox.Show( “你有没有提供舞台表演?”, “抑制”,MessageBoxButtons.YesNo,MessageBoxIcon.问题 ); 如果(确认==Di
列表视图中删除项目,我要查找的代码将显示一个消息框进行确认,如果未选择任何项目,则将显示一个错误消息框
这是我的代码,它不起作用:(
private void按钮2\u单击(对象发送者,事件参数e)
{
如果(listView1.SelectedItems!=null)
{
var confirmation=MessageBox.Show(
“你有没有提供舞台表演?”,
“抑制”,MessageBoxButtons.YesNo,MessageBoxIcon.问题
);
如果(确认==DialogResult.Yes)
{
对于(int i=0;i
错误不在删除中,但在MessageBox的
中,我有两个MessageBox的
,在确认之前,必须先显示错误。从结束到零开始计数
for (int i = listView1.Items.Count - 1; i >= 0; i--)
{
if (listView1.Items[i].Selected)
{
listView1.Items[i].Remove();
}
}
但是,请考虑每个ListVIEW项都有一个索引属性,使用该集合有助于避免在较少数量的项目上进行冗余测试和循环。
(注意,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", ...);
您可以只使用此代码而不使用--减量
listView1.Items[i].Remove();
注意:您还可以通过指定位置来使用RemoteAt方法
。您需要将确认消息框
从Show
更改为ShowDialog
。这将使其处于模式并等待结果
您需要在“SelectedItems”上检查是否为空您可以这样更改代码。请注意,ListView.SelectedDices
集合保存所选的ListViewItems
的索引。只需从头开始迭代它们,您不需要处理索引更新,而是将它们留给循环:
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);
您不应引用迭代期间使用的原始集合,而应引用其他集合:
foreach(ListViewItem item in listView1.Items)
if (item.Selected)
listView1.Items.Remove(item);
您的输出窗口中是否有任何错误?您会遇到什么异常?我没有收到错误,也没有异常,我实际上可以删除项目,但是,错误在MessageBox中,非常感谢:)MessageBox中的错误是什么意思。。?你需要澄清或澄清这个问题。重新编写与您当前遇到的问题相关的问题。错误不在删除中,但在MessageBox中我有两个MessageBox,在确认之前必须先显示erreur是,因为您测试为null,而SelectedItems集合从不为null,如果没有选择,则它是一个空集合是的,它正在工作非常感谢您的帮助:)我收到此错误(错误1“System.Windows.Forms.MessageBox”不包含“ShowDialog”的定义)哦,好的,我以为您在使用WPF。枚举时无法修改集合it@Thelonias,我写道“其他”集合,但答案中没有。ToList()
可用于在迭代之前创建一个集合,但索引向后时更为理想。
foreach(ListViewItem item in listView1.Items)
if (item.Selected)
listView1.Items.Remove(item);
//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]);
}
}
}