递归遍历文件夹下的所有子目录,并将每一个节点绑定到一个文件夹中,点击节点则调用huantu方法,用listview控件显示文件名,为每一个listviewitem节点动态定义listviewitem节点点击事件,并调用 System.Diagnostics.Process.Start();方法打开。 可问题就出现在这里,当我点击listviewitem节点,也就是调用 System.Diagnostics.Process.Start();方法时却爆出“索引超出范围。必须为非负值并小于集合大小”的异常,我细心的找了一下,丹找不到问题出在哪,求各位大神帮我解决
public void BindTreeView2(string path, TreeViewItem tree1, TreeView tree2,ListView lv)
{
DirectoryInfo di = new DirectoryInfo(path);
DirectoryInfo[] dirs = di.GetDirectories();//取得路径数组
foreach (DirectoryInfo i in dirs)
{
TreeViewItem ziDt = new TreeViewItem(); //递归遍历文件夹,并将文件夹的树形结构装入treeviewitem节点
ziDt.Header = i.Name;
tree1.Items.Add(ziDt);
ziDt.Selected += new RoutedEventHandler(delegate (object shabi, RoutedEventArgs r)
{ //选中节点, 便利节点对应文件夹下的所有文件夹路径和文件路径,然后调用huantu方法在listview控件中
//显示这些文件名
lv.Items.Clear();
if (ziDt.Header == ((TreeViewItem)tree2.SelectedItem).Header)
{
list1.Clear(); //清空之前选中节点所取得的所有路径
string[] directory1 = Directory.GetDirectories(i.FullName);
foreach (string a in directory1) //将目录下的文件夹路径加到list1
{
list1.Add(a);
}
directory1 = null;
directory1 = Directory.GetFiles(i.FullName);
foreach (string a in directory1) //将目录下的文件路径加到list1
{
list1.Add(a);
}
Data.huantu(lv,list1);
}
});
BindTreeView2(i.FullName, ziDt, tree2,lv);
}
}
//换图方法
public static void huantu(ListView listview1, List<string> files)
{
for (int i = 0; i < files.Count; i++)
{
if (!File.Exists(files[i]))
{
continue;
}
else
{
lv = new ListViewItem();
Thickness thick = new Thickness(5);
lv.Margin = thick;
lv.Content = System.IO.Path.GetFileName(files[i]);
lv.Width = 120;
lv.FontSize = 20;
lv.MouseDoubleClick += delegate (object sender1, MouseButtonEventArgs e1)
{
**//系统提示出现异常“索引超出范围。必须为非负值并小于集合大小”的代码在这里 ↓,但以我的水平目前找不到问题出在哪,求大神解决****
System.Diagnostics.Process.Start(files[i]);
};
listview1.Items.Add(lv);
}
}
}