我有一个列表框,其DataSource是一个包含文件夹名称的列表。我想从列表框和路径中删除文件夹,但第一个它不起作用。
这里是代码:
private static List<string> themesF;
public Form1()
{
InitializeComponent();
List<string> dirs = new List<string (System.IO.Directory.GetDirectories(@"Thems"));
var pngs = System.IO.Directory.GetFiles(@"Thems").Where(s => s.EndsWith(".png"));
themesF = new List<string>();
for (int i = 0; i < dirs.Count; i++)
{
themesF.Add(dirs[i].Substring(6));
Console.WriteLine("A) Directorio " + dirs[i]);
Console.WriteLine("B) Carpeta" + themesF[i]);
}
lb.DataSource = themesF;
pbx.ImageLocation = (@"Thems\" + themesF[0] + @"\Preview.png");
}
private void btnRemove_Click(object sender, EventArgs e)
{
String folder = lb.SelectedItem.ToString();
themesF.Remove(folder);
lb.DataSource = null;
lb.DataSource = themesF;
System.IO.Directory.Delete(@"Thems\" + folder,true);
}
答案 0 :(得分:0)
试试这个:
private void btnRemove_Click(object sender, EventArgs e)
{
string folder = themesF.Find(t=> t.Equals(lb.SelectedItem.Text));
themesF.Remove(folder);
lb.DataSource = themesF;
System.IO.Directory.Delete(@"Thems\" + folder,true);
}
如果要从列表中删除某些内容,可以先找到一种方法。 当你写这个:lb.DataSource = something;你不需要先将null放在那里。
答案 1 :(得分:0)
List<T>
没有报告对列表的更改,因此请尝试使用BindingList<T>
代替:
BindingList<string> themesF = new BindingList<string>();
从Remove_Click事件中删除那些DataSource行,因为那些不再需要了。只需设置一次DataSource。