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的属性,并有红线下划线
您的问题是因为该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()方法将优化这个动作的表现-在活动列表视图不会刷新本身之间的这些方法调用.
而不是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)