C# TreeVie问题,初始化如果某节点有子节点则显示前面的+号,双击时,才真正生成,怎么实现,新手没分,谢谢

解决方案 »

  1.   

    TreeView好像是自动根据有没有子节点决定是否显示前面的+号的吧?
      

  2.   

    tree的“afterSelect”事件 这个怎么弄,能详细点吗?
    因为程序在加载的时候不能把所有的节点都生成,只有在点击的时候才动态生成,但是如果知道某节点有子节点的话,也得显示前面的+号,要不就不知道该节点是否有子节点! 好生郁闷,高手给说一下??????????????????????????????????
      

  3.   

     private void treeView1_BeforeExpand(object sender, TreeViewCancelEventArgs e)
            {
                e.Node.Nodes.Clear();
                e.Node.Nodes.Add("aaaa");
                e.Node.Nodes.Add("bbbb");
            }要想前面有"+", 则必须有子节点,随便给个, 在展开前清除, 再动态添加.
      

  4.   

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;
    using System.Collections;
    using Microsoft.Win32;
    using System.IO;
    using System.Xml.XPath;
    using System.Xml;
    using System.Xml.Xsl;
    using System.Text.RegularExpressions;
    using ConsoleApplication1;
    using System.Drawing.Imaging;
    namespace ReaderDir
    {
        public partial class Form1 : Form
        {
            Hashtable keytable = new Hashtable();
            DriveInfo[] dir = DriveInfo.GetDrives();
            public Form1()
            {
                InitializeComponent();
                            keytable.Add(@"d\",dir[1].RootDirectory);
                for (int i = 0; i < dir.Length; i++)
                {
                    keytable.Add(dir[i].RootDirectory, dir[i].RootDirectory);
                }        }        private void button1_Click(object sender, EventArgs e)
            {
                foreach (DictionaryEntry i in keytable)
                {
                    DirectoryInfo info = new DirectoryInfo(Convert.ToString(i.Value));
                    TreeNode node = treeView1.Nodes.Add(info.FullName);
                    addnode(node, info);            }
            }        /// <summary>
            /// ラヤシコソエーノ
            /// </summary>
            /// <param name="treeNodeCollection"></param>
            /// <param name="info"></param>
            private void addnode(TreeNode treeNodeCollection, DirectoryInfo info)
            {
                TreeNode node = null;
                try
                {
                    foreach (FileInfo f in info.GetFiles())
                    {
                        node = treeNodeCollection.Nodes.Add(f.Name);
                    }
                    foreach (DirectoryInfo name in info.GetDirectories())
                    {
                        node = treeNodeCollection.Nodes.Add(name.Name);
                    }
         
                }
                catch (Exception ex) { }        }        private void treeView1_AfterExpand(object sender, TreeViewEventArgs e)
            {
                TreeNodeCollection nodes = e.Node.Nodes;            foreach (TreeNode node in nodes)
                {                if (node.Nodes.Count == 0)
                    {
                        addnode(node, new DirectoryInfo(node.FullPath));
                    }            }
            }
        }
    }
      

  5.   

    根据9楼的方法确实可以实现。
    Public Class Form1    Private WithEvents TestTree As TreeView    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            TestTree = New TreeView
            For i As Integer = 0 To 20
                Dim n As New TreeNode("Node" + i.ToString)
                If i Mod 2 = 0 Then n.Nodes.Add("Delete")
                TestTree.Nodes.Add(n)
            Next        Me.Controls.Add(TestTree)
            TestTree.Dock = DockStyle.Fill
        End Sub    Private Sub TestTree_BeforeExpand(ByVal sender As Object, ByVal e As System.Windows.Forms.TreeViewCancelEventArgs) Handles TestTree.BeforeExpand
            If e.Node.Nodes.Count > 0 Then
                e.Node.Nodes.Clear()
                For j As Integer = 0 To 5
                    e.Node.Nodes.Add("SubNode" + j.ToString)
                Next
            End If
        End SubEnd Class
      

  6.   

    TreeView是自动根据有没有子节点决定是否显示前面的+号的