我无法弄清楚如何在c#中正确删除winform列表框中的项目。
列表框中填充了FileSystemWatcher
中的一些字符串,它基本上会在列表框中放入哪些文件被修改。
然后我做了一个“搜索”功能,删除了不包含用户在文本框中输入内容的项目。
这是代码
private void btnSearch_Click(object sender, EventArgs e)
{
if (!String.IsNullOrEmpty(txtSearch.Text) && lstFileEvents.Items.Count > 0)
{
for (int i = 0; i < lstFileEvents.Items.Count; i++)
{
if (!lstFileEvents.Items[i].ToString().Contains(txtSearch.Text))
{
lstFileEvents.Items.RemoveAt(i);
}
}
lstFileEvents.Refresh();
}
}
实际上我尝试过很多方法,查看各种stackoverflow问题和google结果,如:
没什么可行的。列表停留在那里,调试没有帮助。
我做错了什么?
编辑:
列表框人口代码:
void fswFileWatch_Renamed(object sender, RenamedEventArgs e)
{
fswFileWatch.EnableRaisingEvents = false;
WriteListbox("Renamed: ", e);
fswFileWatch.EnableRaisingEvents = true;
}
public void WriteListbox(string msg, FileSystemEventArgs e)
{
//Some filter which works fine
if (!String.IsNullOrEmpty(txtExcludeFilter.Text))
{
foreach (string Filter in txtExcludeFilter.Text.Split(','))
{
//some other filter
if (!e.FullPath.Contains(Filter))
{
//here's where I populate the list
lstFileEvents.Items.Add(msg + e.FullPath);
}
}
}
else
{
lstFileEvents.Items.Add(msg + e.FullPath);
}
}
答案 0 :(得分:3)
Here建议反过来删除列表项。 第一集:
listBox1.SelectionMode = SelectionMode.MultiExtended;
然后反向删除:
for (int i = listBox1.SelectedIndices.Count-1; i >= 0; i--)
{
listBox1.Items.RemoveAt(listBox1.SelectedIndices[i]);
}