分享

快速清空TreeView的内容

 Cloud书屋 2012-11-22

[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

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多