/// <summary> /// 根据TreeView选中结点的全路径设置选中结点 /// </summary> /// <param name="tree">当前的树</param> /// <param name="fullPath">全路径[@"Earth/Assi/Yindu/jiazi2"]</param> /// <returns>设置成功返回true,失败返回false</returns> public static bool SetSelectedNodeByFullPath(TreeView tree, string fullPath) { string[] paths = fullPath.Split('/'); TreeNode selectedNode = null; if (paths.Length == 0) { throw new Exception(string.Format("全路径{0}不是合法的TreeView选中结点全路径", fullPath)); } for (int i = 0; i < tree.Nodes.Count; i++) { if (!tree.Nodes[i].Text.Equals(paths[0])) { continue; } //此处第二个参数传入固定值1,是因为这儿的for循环对应的路径索引为0,所以下一层的值为从1开始 selectedNode = TreeViewZ.FindSelectedNode(paths, 1, tree.Nodes[i]); if (selectedNode != null) { tree.SelectedNode = selectedNode; return(true); } else { continue; } } return(false); }
/// <summary> /// 递归展开结点 /// </summary> /// <param name="treeNodes">TreeView.TreeNodeCollection</param> /// <param name="currentDepth">当前已展开的深度</param> /// <param name="depth">要展开的深度</param> private static void ExpandDepth(TreeNodeCollection treeNodes, int currentDepth, int depth) { if (currentDepth > depth) { return; } foreach (TreeNode node in treeNodes) { node.Expand(); TreeViewZ.ExpandDepth(node.Nodes, ++currentDepth, depth); currentDepth--; } }
/// <summary> /// 递归查找选中项结点 /// </summary> /// <param name="paths">路径集合</param> /// <param name="index">当前路径索引</param> /// <param name="parentNode">父级节点</param> /// <returns>找到的选中节点</returns> private static TreeNode FindSelectedNode(string[] paths, int index, TreeNode parentNode) { for (int i = 0; i < parentNode.Nodes.Count; i++) { if (parentNode.Nodes[i].Text == paths[index]) { index++; if (parentNode.Nodes[i].Nodes.Count > 0 && paths.Length > index) { return(TreeViewZ.FindSelectedNode(paths, index, parentNode.Nodes[i])); } else if (parentNode.Nodes[i].Nodes.Count == 0 && paths.Length == index) { return(parentNode.Nodes[i]); } else { return(null); } } } return(null); }
/// <summary> /// 展开树深度 /// </summary> /// <param name="tree">当前的树</param> /// <param name="depth">要展开的深度</param> public static void ExpandDepth(TreeView tree, int depth) { TreeViewZ.ExpandDepth(tree.Nodes, 0, depth - 1); }