Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在C中从ListView中删除项#_C#_Listview - Fatal编程技术网

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