/// <summary> /// 生成指定结点的至其二级子结点 /// </summary> /// <param name="item">指定结点</param> public static void CreatSubTVItemFromTVItem(MyTreeViewItem item) { if (item.Items.Count == 0) { _CreatSubTVItemFromTVItem(item); } foreach (var i in item.Items) { var ii = i as MyTreeViewItem; if (ii.Items.Count == 0) { _CreatSubTVItemFromTVItem(ii); } } }
/// <summary> /// 返回treeview的根结点 /// </summary> /// <returns></returns> public static MyTreeViewItem GetRootTVItem() { string[] disks = Directory.GetLogicalDrives(); DriveInfo[] disksInfo = DriveInfo.GetDrives(); int j = 0; MyTreeViewItem root = new MyTreeViewItem("此电脑", MyIcons.disk); root.Tag = ""; foreach (string i in disks) { MyTreeViewItem tvic = new MyTreeViewItem( disksInfo[j++].VolumeLabel + " (" + i.Substring(0, 2) + ")", MyIcons.disk); tvic.Tag = i; root.Items.Add(tvic); } return(root); }
/// <summary> /// 返回代表指定路径的treeviewItem,不存在时自动为该路径创建结点 /// </summary> /// <param name="tv"></param> /// <param name="path">指定的路径</param> /// <param name="changeSelected">是否设置为被选中项,默认false</param> /// <returns>对应结点</returns> public static MyTreeViewItem GetTVItemFromPath(TreeView tv, string path, bool changeSelected = false) { tv.BeginInit(); MyTreeViewItem aimItem = tv.Items[0] as MyTreeViewItem; //获得root item if (path != "") //不是代表“此电脑”的路径 { string disk = path.Substring(0, 3); //获取磁盘 //使aimItem为某磁盘根目录 foreach (var i in aimItem.Items) { if (((MyTreeViewItem)i).Tag.ToString() == disk) { aimItem = i as MyTreeViewItem; break; } } //获取磁盘子路径 path = path.Substring(3); string[] dirs = path.Split('\\'); //aimItem指向目标目录 for (int j = 0; j < dirs.Length; j++) { if (aimItem.Items.IsEmpty)//该目录没有子目录时,创建子目录 { CreatSubTVItemFromTVItem(aimItem); } foreach (var i in aimItem.Items) { if (((MyTreeViewItem)i).HeaderText == dirs[j]) { aimItem = i as MyTreeViewItem; break; } } } } if (changeSelected == true) { (tv.SelectedItem as MyTreeViewItem).IsSelected = false; aimItem.IsSelected = true; } tv.EndInit(); return(aimItem); }
/// <summary> /// 生成指定结点的子结点 /// </summary> /// <param name="item">指定结点</param> private static void _CreatSubTVItemFromTVItem(MyTreeViewItem item) { try { string newpath = item.Tag.ToString(); string[] dirs = Directory.GetDirectories(newpath);//获取该目录的内容 if (newpath.Length > 3) { newpath += "\\"; } ; foreach (string i in dirs) { if ((new FileInfo(i).Attributes & FileAttributes.Hidden) == FileAttributes.Hidden) { continue; } MyTreeViewItem tvic = new MyTreeViewItem(i.Replace(newpath, ""), MyIcons.folder); tvic.Tag = i; item.Items.Add(tvic); } } catch (Exception) { } }