Private Sub Command1_Click() TreeView1.Nodes(0).Expanded = True End SubPrivate Sub Form_Load() TreeView1.Nodes.Add , "item1", "item1", "item1" TreeView1.Nodes.Add "item1", tvwChild, "item11", "item11" TreeView1.Nodes.Add , "item2", "item2", "item2" TreeView1.Nodes.Add "item2", tvwChild, "item21", "item21" TreeView1.Nodes.Add "item2", tvwChild, "item22", "item22" TreeView1.Nodes.Add "item2", tvwChild, "item23", "item23" TreeView1.Nodes.Add , "item3", "item3", "item3" End SubPrivate Sub TreeView1_Collapse(ByVal Node As MSComctlLib.Node) TreeView1.Height = TreeView1.Height - getChildsCount(Node) * 250 End SubPrivate Sub TreeView1_Expand(ByVal Node As MSComctlLib.Node) TreeView1.Height = TreeView1.Height + getChildsCount(Node) * 250 End SubPrivate Function getChildsCount(ByRef Node As MSComctlLib.Node) As Integer Dim i As Integer Dim childCount As Integer For i = 1 To TreeView1.Nodes.Count If Not getNoteParent(TreeView1.Nodes(i)) Is Nothing Then If getNoteParent(TreeView1.Nodes(i)).Key = Node.Key Then childCount = childCount + 1 End If End If Next getChildsCount = childCount End FunctionPrivate Function getNoteParent(ByRef Node As MSComctlLib.Node) As MSComctlLib.Node On Error GoTo setNothing Set getNoteParent = Node.Parent Exit Function setNothing: Set getNoteParent = Nothing End Function
滚动条,高度随着结点展开的数而增大这种方法不可取。这样会有闪烁现象。
方法一:
高度变的极小,然后做个循环,高度逐渐增加,直到TreeView的GetVisibleCount方法结果=TreeView.Nodes.Count;
方法二:
以字体高度换算值与图标高度值之间的大值进行计算而得,这样做的时候要考虑行间空隙略做调整。
Private Sub Command1_Click()
TreeView1.Nodes(0).Expanded = True
End SubPrivate Sub Form_Load()
TreeView1.Nodes.Add , "item1", "item1", "item1"
TreeView1.Nodes.Add "item1", tvwChild, "item11", "item11"
TreeView1.Nodes.Add , "item2", "item2", "item2"
TreeView1.Nodes.Add "item2", tvwChild, "item21", "item21"
TreeView1.Nodes.Add "item2", tvwChild, "item22", "item22"
TreeView1.Nodes.Add "item2", tvwChild, "item23", "item23"
TreeView1.Nodes.Add , "item3", "item3", "item3"
End SubPrivate Sub TreeView1_Collapse(ByVal Node As MSComctlLib.Node)
TreeView1.Height = TreeView1.Height - getChildsCount(Node) * 250
End SubPrivate Sub TreeView1_Expand(ByVal Node As MSComctlLib.Node)
TreeView1.Height = TreeView1.Height + getChildsCount(Node) * 250
End SubPrivate Function getChildsCount(ByRef Node As MSComctlLib.Node) As Integer
Dim i As Integer
Dim childCount As Integer
For i = 1 To TreeView1.Nodes.Count
If Not getNoteParent(TreeView1.Nodes(i)) Is Nothing Then
If getNoteParent(TreeView1.Nodes(i)).Key = Node.Key Then
childCount = childCount + 1
End If
End If
Next
getChildsCount = childCount
End FunctionPrivate Function getNoteParent(ByRef Node As MSComctlLib.Node) As MSComctlLib.Node
On Error GoTo setNothing
Set getNoteParent = Node.Parent
Exit Function
setNothing:
Set getNoteParent = Nothing
End Function