[1]clear方法:TreeView1.Nodes.Clear() [2]TreeView提供了Clear方法来清除所有节点,但是采用逆序逐一删除节点,会更快。 你可以使用下面的代码: Dim i As Integer
For i = (TreeView1.Nodes.Count - 1) To 0 Step -1 '因为会重新绘制控件以显示剩余的节点,要逆序删除,如果顺着删除,那么删除第1个节点,第2个节点会顶上去变成第1个节点。
TreeView1.Nodes.Remove(TreeView1.Nodes(i))
Next i
[3]使用简单的API函数,你将可以进一步提高性能。不幸的是,当VB循环删除TreeView的节点时,它不断地重新绘制控件以显示剩余的节点。而这个行为会显著地降低进程的速度。我们所要采用的方法就是当删除节点时,禁止TreeView重新绘制它的节点。幸运的是,Windows API提供了一个函数来做到这一切。SendMessage()函数支持WM_SETREDRAW消息。使用这个消息,你的代码可以决定是否一个窗口应该被重新绘制。传递True (等价于API的1)允许窗口重新绘制,或者False (0)来阻止绘制。 加上API代码,我们清除代码是这样: 组合了API的逆序删除是最快的清除TreeView控件。 Private Const WM_SETREDRAW = &HB
Public Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Object) As Long
Private Sub Button7_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button7.Click
Dim i As Integer
SendMessage(TreeView1.Handle, WM_SETREDRAW, 0, 0)
For i = TreeView1.Nodes.Count - 1 To 0 Step -1
TreeView1.Nodes.Remove(TreeView1.Nodes(i))
Next i
SendMessage(TreeView1.Handle, WM_SETREDRAW, 1, 0)
End Sub
|