快速清除TreeView的内容

来源:互联网 发布:西南交大网络设置 编辑:程序博客网 时间:2024/04/30 15:02

编号:QA004593
建立日期: 2002年3月23日 最后修改日期:2002年3月23日
所属类别:

Visual Basic - Windows 9x控件

文章:

李海译自IVBTips。
虽然TreeView提供了Clear方法来清除所有节点,但是采用逆序逐一删除节点,会更快。 你可以使用下面的代码:
Private Sub TrvwClear()
Dim x As Integer
With TreeView1.Nodes
For x = .Count To 1 Step -1
.Remove x
Next x
End With
End Sub

使用简单的API函数,你将可以进一步提高性能。不幸的是,当VB循环删除TreeView的节点时,它不断地重新绘制控件以显示剩余的节点。而这个行为会显著地降低进程的速度。我们所要采用的方法就是当删除节点时,禁止TreeView重新绘制它的节点。幸运的是,Windows API提供了一个函数来做到这一切。SendMessage()函数支持WM_SETREDRAW消息。使用这个消息,你的代码可以决定是否一个窗口应该被重新绘制。传递True (等价于API的1)允许窗口重新绘制,或者False (0)来阻止绘制。 加上API代码,我们清除代码是这样:
Private Const WM_SETREDRAW = &HB
Private Declare Function SendMessage Lib "user32" Alias _
"SendMessageA" (ByVal hwnd As Long, ByVal wMsg As _
Long, ByVal wParam As Long, lParam As Any) As Long

Private Sub TrvwClear()
Dim x As Integer
With TreeView1
SendMessage .hwnd, WM_SETREDRAW, 0, 0
For x = .Nodes.Count To 1 Step -1
.Nodes.Remove x
Next x
SendMessage .hwnd, WM_SETREDRAW, 1, 0
End With
End Sub

组合了API的逆序删除是最快的清除TreeView控件。

文章来源:IVBTips。

原创粉丝点击