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.428 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. |
sevAniGif (VB/VBA) Anzeigen von animierten GIF-Dateien Ab sofort lassen sich auch unter VB6 und VBA (Access ab Version 2000) animierte GIF-Grafiken anzeigen und abspielen, die entweder lokal auf dem System oder auf einem Webserver gespeichert sind. Tipp des Monats März 2024 Dieter Otter UTF-8 Konvertierung von Dateien und Strings VB6 selbst verfügt über keine Funktionen zur UTF-8 Konvertierung von Daten. Mit Hilfe des ADODB.Stream-Objekts lassen sich diese fehlenden Funktionen aber schnell nachrüsten. TOP Entwickler-Paket TOP-Preis!! Mit der Developer CD erhalten Sie insgesamt 24 Entwickler- komponenten und Windows-DLLs. Die Einzelkomponenten haben einen Gesamtwert von 1605.50 EUR... |
||||||||||||||||
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. |