我在VS2005中使用TREEVIEW控件从数据库中动态抽取数据形成了一个树,但只能点每一级前面的加号才能打开这一级的菜单,我的问题是:一\能不能点击每一级的文字就打开这一级呢?比如说:+单位,在这里我点击+能打开,点击单位就没有反应;二\另外这里的+很小,如何显示大加号呀!
我想要的最终效果是这个样子:http://msdn.microsoft.com/zh-cn/library/aa187919.aspx请大家注意我这里是动态从数据库中抽取的数据形成的TREE,不是静态的.

解决方案 »

  1.   

    lz要实现这两个功能方法如下:第一个问题:1.在窗体load时候,将最最上层的结点添加上
        Private Sub Form2_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            dt = GetTable("select * from tree")  //这里是获得表的内容        Dim dv As DataView = dt.DefaultView
            dv.RowFilter = "parentid='0'"        For Each row As DataRowView In dv
                Dim nd As New TreeNode(row("text"))
                nd.Tag = row("id")
                tree.Nodes.Add(nd)
            Next
        End Sub
    2.在tree的AfterExpand和MouseDown添加如下代码:
        Private Sub tree_AfterExpand(ByVal sender As System.Object, ByVal e As System.Windows.Forms.TreeViewEventArgs) Handles tree.AfterExpand
            LoadNodes(e.Node)
        End Sub    Private Sub tree_MouseDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles tree.MouseDown
            Dim ndTemp As TreeNode        ndTemp = tree.GetNodeAt(e.Location)        If Not ndTemp Is Nothing Then
                LoadNodes(ndTemp)
                ndTemp.Expand()
            End If
        End Sub    Private Sub LoadNodes(ByVal node As TreeNode)
            If Not node Is Nothing Then
                Dim dv As DataView
                dv = dt.DefaultView
                dv.RowFilter = "parentid='" + node.Tag.ToString() + "'"            For Each row As DataRowView In dv
                    Dim nd As New TreeNode(row("text"))
                    nd.Tag = row("id")
                    node.Nodes.Add(nd)
                Next
            End If
        End Sub这样一来就可以实现第一个问题了。不管是点+号,还是文本都可以动态加载结点下的内容注:数据库中的tree表结构为三列 id,parentid,text,最上层的parentid都为0,子结点的parentid为最上层结点的id
      

  2.   

    第二个问题:把treeview控件的ShowPlusMinus 设置为false, 在窗体中添加一个ImageList,其中添加两个状态图片,在程序中判断如果是展开的就显示-号图片,反之显示+号图片。
    搞定~~~
      

  3.   

    倒~~~把这段改成c#的方法就ok了啊~~~