热情软件屋

 

快速清除TreeView的内容


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

文章:

    李海译自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

 
把这个问题推荐给朋友
   
   
您的意见类别
您的名字
您的电子邮件
您的建议(请尽可能详细)
 
 

版权所有 1997-2008 热情软件屋
如果您有任何建议和意见, 请给我发个电子邮件 askpro@china-askpro.com
Web Designed by ZebraStudio