本帖最后由 lupct 于 2010-05-13 11:26:02 编辑

解决方案 »

  1.   

    本篇提供遍历TreeView的方法(转)一 归根结底就是用递归跟树TreeView的初始化是类似的1 TreeNodeCollection 做参数(这个是找一个checked node,可以替换以相应的处理)调用时用:Check(treeMenu.Nodes);// treeMenu.Nodes 就只是一个根节点        /// <summary>
        /// 遍历TreeView 这里不能用TreeView做参数(无法递归TreeNode不能转换成TreeView),只能用 根节点后在是 节点集合
        /// </summary>
        /// <param name="tvtemp">节点集 书的nodes集就是它的根节点</param> 
    protected void Check(TreeNodeCollection tvtemp)
        {
            foreach (TreeNode temp in tvtemp)
            {
                if (temp.Checked == true)
                {
                    temp.Checked = false;
                    break;
                }
                if (temp.ChildNodes.Count != 0)//如果是iewc:treeview直接写temp.Nodes
                {
                    Check(temp.ChildNodes);
                }
            }
        }
     
    2 根节点做参数     protected void AllCheck(TreeNode root)
        {
            if (root.ChildNodes.Count != 0)
                foreach (TreeNode temp in root.ChildNodes)
                {
                    if (temp.Checked == true)
                    {
                        //do what you want
                    }
                    if (temp.ChildNodes.Count != 0)
                    {
                        AllCheck(temp.ChildNodes);
                    }
                }
        }
      

  2.   

    先递归所有的文件夹和文件,记录两个东西,深度和路径,
    作为TreeView的数据源,绑定后深度值为TreeView的node深度,路径为节点的显示值
      

  3.   

    二 使用栈遍历TreeView    /// <summary>
        /// 非递归后序遍历二叉树
        /// =Color.Red 表示从右进入
        /// =Color.Lavender表示从左进入
        /// ==Color.Red 表示从右回来
        /// </summary>
        /// <param name="tn">当前子树的根</param>
        /// <param name="lv">保存结果的列表</param>
    le="COLOR: #0000ff">private void PreTraWithoutRecurtion(TreeNode tn, ListBox lv)
        {
            Stack stack = new Stack();        while (tn.ChildNodes.Count != 0)
            {
                lv.Items.Add(tn.Text);
                stack.Push(tn);
                tn = tn.ChildNodes[0];
            }
            lv.Items.Add(tn.Text);
            while (stack.Count != 0)
            {
                TreeNode tn1 = (TreeNode)stack.Pop();
                //if (tn.ChildNodes.Count > 1)
                //{
                for (int i = 1; i < tn1.ChildNodes.Count; i++)
                {
                    tn = tn1.ChildNodes[i];
                    while (tn.ChildNodes.Count != 0)
                    {
                        lv.Items.Add(tn.Text);
                        stack.Push(tn);
                        tn = tn.ChildNodes[0];
                    }
                    lv.Items.Add(tn.Text);
                }
                //}        }    }
        private void GetTreeViewAll(TreeNode tn, ListBox lv)
        {
            lv.Items.Add(tn.Text);
            Stack stack = new Stack();
            for (int i = 0; i < tn.ChildNodes.Count; i++)
            {
                if (tn.ChildNodes[i].ChildNodes.Count > 0)
                {
                    stack.Push(tn.ChildNodes[i]);
                }
                lv.Items.Add(tn.ChildNodes[i].Text);
            }
            while (stack.Count > 0)
            {
                TreeNode outTn = (TreeNode)stack.Pop();
                for (int i = 0e="COLOR: #000000">; i < outTn.ChildNodes.Count; i++)
                {
                    if (outTn.ChildNodes[i].ChildNodes.Count > 0)
                    {
                        stack.Push(outTn.ChildNodes[i]);
                    }
                    lv.Items.Add(outTn.ChildNodes[i].Text);
                }
            }
        }
      

  4.   

    左侧TREEVIEW  我已经遍历出路径,代码如下:
    /// <summary>
        /// 遍历目录 绑定到Treeview
        /// </summary>
        /// <param name="FileFolder">绝对路径</param>
        private void LoadFileFolder(string FileFolder)
        {
            DirectoryInfo dir = new DirectoryInfo(FileFolder);
            if (dir.Exists)
            {
                foreach (DirectoryInfo d in dir.GetDirectories())     //查找子目录     
                {
                    TreeNode rootNode = new TreeNode();
                    LoadFileFolder(dir + d.ToString() + "\\");
                    rootNode.Text = d.Name;
                    rootNode.Value = dir + d.ToString() + "\\";
                    TreeView1.Nodes.Add(rootNode);
                    rootNode.Expanded = false;
                    rootNode.Selected = false;
                    if (d.Exists)
                    {
                        foreach (DirectoryInfo dd in d.GetDirectories())
                        {
                            TreeNode Node = new TreeNode();
                            Node.Text = dd.Name;
                            Node.Value = dir + "\\" + d.ToString() + "\\";
                            rootNode.ChildNodes.Add(Node);
                            foreach (FileInfo f in d.GetFiles("*.*"))             //查找文件   
                            {
                                TreeNode Nodee = new TreeNode();
                                Nodee.Text = f.Name;
                                Nodee.Value = f.Name;
                                Node.ChildNodes.Add(Nodee);
                            }
                        }
                    }
                }
            }
        }
    假设服务器上路径 只有2层深度,我只想要在右侧显示选中节点目录下的所有文件 该如何做,跪求高手指点!
      

  5.   

    这句不可以么?
    把d.GetFiles填充到你右侧的控件就好了么
                            foreach (FileInfo f in d.GetFiles("*.*"))             //查找文件   
                            {
                                TreeNode Nodee = new TreeNode();
                                Nodee.Text = f.Name;
                                Nodee.Value = f.Name;
                                Node.ChildNodes.Add(Nodee);
                            }
      

  6.   

    控件建议用listview的detail视图
    其实用多行文本框什么的也可以.呵呵