如何从列表框C#中删除所选项目

Zi *_*ing 0 c# listbox winforms

我目前正在尝试查看用户在列表框中选择的所有文件和文件夹.在片刻我能够列出用户使用openfiledialogue选择的内容,但是当我尝试从列表框中删除它时,我现在面临的问题.我试图让用户点击文件旁边的复选框,然后按下删除按钮将其删除

这是我删除按钮的代码

      private void button2_Click(object sender, EventArgs e)
    {
        for (int i = listView1.SelectedItems.Count - 1; i >= 0; i--)
        {
            listView1.Items.Remove(listView1.SelectedItems[i]);
        }

    }
Run Code Online (Sandbox Code Playgroud)

这是列表框的添加文件,以供参考jsut使用

    private void button1_Click(object sender, EventArgs e)
    {

        OpenFileDialog openfiledialog = new OpenFileDialog();
        // Display open file dialog
        openfiledialog.InitialDirectory = "C:\\";
        //openfiledialog.Multiselect = true;
        openfiledialog.Title = "Lock File";
        openfiledialog.Filter = "All Files | *.*";
        openfiledialog.ShowDialog();


        if (openfiledialog.FileName != "")
        {

        //move through FileInfo array and store in new array of fi
            listView1.Items.Clear();
            foreach (string file in openfiledialog.FileNames)
            {
                listView1.Items.Add(file);
            }        
        }

    }
Run Code Online (Sandbox Code Playgroud)

我按下删除按钮什么都没发生,我在谷歌上看到了一些使用selectionmode的答案,但当我使用它时,我的列表框没有selectionmode的属性,并有红线下划线

Nir*_*rMH 9

您的问题是因为该SelectedItems属性实际上是对Items集合的引用,您在迭代它时更改集合.尝试以下代码

listView1.BeginUpdate();
ArrayList vSelectedItems = new ArrayList(listView1.SelectedItems);
foreach (string item in vSelectedItems)
{
   listView1.Items.Remove(item);
}
listView1.EndUpdate();
Run Code Online (Sandbox Code Playgroud)

BeginUpdate()EndUpdate()方法将优化这个动作的表现-在活动列表视图不会刷新本身之间的这些方法调用.


Waq*_*qas 5

而不是listView1.SelectedItems使用listView1.CheckedItems和改变你button2_click的:

private void button2_Click(object sender, EventArgs e)
        {
            foreach (ListViewItem i in listView1.CheckedItems)
                listView1.Items.Remove(i);

        }
Run Code Online (Sandbox Code Playgroud)