[1]clear方法:TreeView1.Nodes.Clear()
[2]TreeView提供了Clear方法來(lái)清除所有節(jié)點(diǎn),但是采用逆序逐一刪除節(jié)點(diǎn),會(huì)更快。 你可以使用下面的代碼:
Dim i As Integer
For i = (TreeView1.Nodes.Count - 1) To 0 Step -1 '因?yàn)闀?huì)重新繪制控件以顯示剩余的節(jié)點(diǎn),要逆序刪除,如果順著刪除,那么刪除第1個(gè)節(jié)點(diǎn),第2個(gè)節(jié)點(diǎn)會(huì)頂上去變成第1個(gè)節(jié)點(diǎn)。
TreeView1.Nodes.Remove(TreeView1.Nodes(i))
Next i
[3]使用簡(jiǎn)單的API函數(shù),你將可以進(jìn)一步提高性能。不幸的是,當(dāng)VB循環(huán)刪除TreeView的節(jié)點(diǎn)時(shí),它不斷地重新繪制控件以顯示剩余的節(jié)點(diǎn)。而這個(gè)行為會(huì)顯著地降低進(jìn)程的速度。我們所要采用的方法就是當(dāng)刪除節(jié)點(diǎn)時(shí),禁止TreeView重新繪制它的節(jié)點(diǎn)。幸運(yùn)的是,Windows API提供了一個(gè)函數(shù)來(lái)做到這一切。SendMessage()函數(shù)支持WM_SETREDRAW消息。使用這個(gè)消息,你的代碼可以決定是否一個(gè)窗口應(yīng)該被重新繪制。傳遞True (等價(jià)于API的1)允許窗口重新繪制,或者False (0)來(lái)阻止繪制。 加上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
聯(lián)系客服