Wie löscht man alle Einträge eines TreeView-Controls? Klar, sagen Sie jetzt: Hierfür gibt es doch die Clear-Methode! ' alle Einträge entfernen TreeView1.Nodes.Clear Korrekt! ABER: Haben Sie gewußt, dass das einzelne Entfernen der Node-Objekte wesentlich schneller vonstatten geht, als die vorhandene Clear-Methode zu verwenden? Das glauben Sie nicht? Erstellen Sie ein neues Projekt und platzieren auf die Form:
Beim Klick auf den 1. Button (Command1) füllen wir das TreeView mit 10.000 Einträgen. Private Sub Command1_Click() ' TreeView mit 10.000 Einträgen füllen Dim i As Long Screen.MousePointer = 11 With TreeView1 For i = 1 To 10000 .Nodes.Add , , "k" & CStr(i), "Eintrag " & CStr(i) Next i End With Screen.MousePointer = 0 End Sub Beim Klick auf den 2. Button (Command2) löschen wir den Inhalt des TreeViews per Clear-Aufruf. Um später einen Vergleich zur Remove-Methode zu haben, stoppen wir die Zeit und zeigen diese dann im Label1 an. Private Sub Command2_Click() Dim nStart As Single ' Testwert auf einem P4 2,0 GHz, 512 MB RAM ' WinXP Prof und VB6 SP5: 305,278 Sek Screen.MousePointer = 11 nStart = Timer() TreeView1.Nodes.Clear Label1.Caption = CStr(Timer() - nStart) & " Sek." Screen.MousePointer = 0 End Sub Starten Sie das Projekt, klicken auf den 1. Button und anschließend auf den 2. Button. Während der TreeView-Inhalt nun gelöscht wird, können Sie getrost einen Kaffee aufsetzen Beenden Sie das Projekt und fügen nun den Code zum einzelnen Löschen der Node-Objekte ein: Prvate Sub Command3_Click() Dim nStart As Single ' Testwert auf einem P4 2,0 GHz, 512 MB RAM ' WinXP Prof und VB6 SP5: 16,7665 Sek Screen.MousePointer = 11 nStart = Timer() With TreeView1.Nodes Do Until .Count = 0 .Remove .Count Loop End With Label2.Caption = CStr(Timer() - nStart) & " Sek." Screen.MousePointer = 0 End Sub Starten Sie das Projekt erneut, klicken wieder zunächst auf den 1. Button und anschließend auf den 3. Button. Aber vorsicht: Jetzt bleibt Ihnen nicht mehr soviel Zeit, einen Kaffee aufzusetzen Wie Sie merken, erfolgt das Löschen jetzt wesentlich schneller. Von über 5 Minuten konnten wir uns auf knapp 17 Sekunden steigern. Durch einen kleinen Trick lassen sich jetzt sogar noch einmal 2 bis 3 Sekunden gutmachen, indem wir die Visible-Eigenschaft des TreeViews vor dem Löschen auf False und danach wieder auf True setzen: ' Testwert auf einem P4 2,0 GHz, 512 MB RAM ' WinXP Prof und VB6 SP5: 14,0144 Sek Screen.MousePointer = 11 nStart = Timer() ' TreeView unsichbar machen TreeView1.Visible = False With TreeView1.Nodes Do Until .Count = 0 .Remove .Count Loop End With ' TreeView wieder sichbar machen TreeView1.Visible = True Label2.Caption = CStr(Timer() - nStart) & " Sek." Screen.MousePointer = 0 Anmerkung: ' Benötigte API-Deklarationen 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 Const WM_SETREDRAW = &HB ' Fenster-Aktualisierung sperren/entsperren Private Function LockControl(objX As Object, bLock As Boolean) If bLock Then ' Disable the Redraw flag for the specified window Call SendMessage(objX.hWnd, WM_SETREDRAW, False, 0) Else ' Enable the Redraw flag for the specified window, and repaint Call SendMessage(objX.hWnd, WM_SETREDRAW, True, 0) objX.Refresh End If End Function Aufruf: ' Testwert auf einem AMD Athlon XP 1800, 1,71 GHz, 512 MB RAM ' Win2000 Prof und VB6 SP5: ' 13,58 Sek ohne LockControl ' 4,95 Sek mit LockControl Screen.MousePointer = 11 nStart = Timer() ' Redraw für TreeView abschalten LockControl TreeView1, True With TreeView1.Nodes Do Until .Count = 0 .Remove .Count Loop End With ' Redraw für TreeView wieder einschalten LockControl TreeView1, False Label4.Caption = Format(CStr(Timer() - nStart), "Standard") & " Sek." Screen.MousePointer = 0 Dieser Tipp wurde bereits 30.472 mal aufgerufen. Voriger Tipp | Zufälliger Tipp | Nächster Tipp
Anzeige
Diesen und auch alle anderen Tipps & Tricks finden Sie auch auf unserer aktuellen vb@rchiv Vol.6 (einschl. Beispielprojekt!) Ein absolutes Muss - Geballtes Wissen aus mehr als 8 Jahren vb@rchiv! - nahezu alle Tipps & Tricks und Workshops mit Beispielprojekten - Symbol-Galerie mit mehr als 3.200 Icons im modernen Look Weitere Infos - 4 Entwickler-Vollversionen (u.a. sevFTP für .NET), Online-Update-Funktion u.v.m. |
vb@rchiv CD Vol.6 Geballtes Wissen aus mehr als 8 Jahren vb@rchiv! Online-Update-Funktion Entwickler-Vollversionen u.v.m. Tipp des Monats April 2024 Skyfloy Chart von Microsoft und dazu noch gratis Tutorial für Microsoft Chart Controls für Microsoft .NET Framework 3.5 Neu! sevCommand 4.0 Professionelle Schaltflächen im modernen Design! Mit nur wenigen Mausklicks statten auch Sie Ihre Anwendungen ab sofort mit grafischen Schaltflächen im modernen Look & Feel aus (WinXP, Office, Vista oder auch Windows 8), inkl. große Symbolbibliothek. |
||||||||||||||||
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein. |