2
www.ChF-Online.de  

Treeview-Control schnell löschen

   Neuigkeiten
   API-Aufrufe in VBA
 Belieb. Datei öffnen
 CommonDialog-Fehler
 Dateidatum lesen & setzen
 rel. Dateipfad korrigieren
 Flex. Öffnen-Dialog
 Flex. Speichern-Dialog
 Kurze Unterbrechung
 Pfade und Verzeichnisse
 Spracheinstellung
aktiv aktiv TreeView löschen
 Verzeichnisauswahl
 Verzeichnisauswahl /UNC
   VBA2HTML
   Word
   Word-VBA
   Word2007 (RibbonX)
   Word2010 (RibbonX)
   Outlook-VBA
   Links zu VB(A)
   DocToHelp
   Netport Express XL
   Astronomie
   Gästebuch
   Volltextsuche
   Sitemap
   Buch:Word-Programmierung
   Impressum & Kontakt
   Datenschutzerklärung
Getestet unter Word2000Getestet unter WordXPGetestet unter Win2000  
Makro/Datei speichern
Print

Auch in VBA kann man auf externe Controls zurückgreifen, um zusätzliche Funktionen zur Verfügung zu stellen oder zu nutzen.
So lässt sich das Microsoft TreeView-Control 6 (MSCOMCTL.OXC) bzw. Microsoft TreeView-Control 5 (COMCTL32.OCX) als zusätzliches Steuerelement in eine Userform einbinden.

Mit dem TreeView-Control steht eine Baumstruktur wie im Explorer zur Anzeige von Einträge zur Verfügung. Die einzelnen Einträge werden dabei als Nodes bezeichnet und können weitere Untereintäge besitzen.

Intern werden die einzelnen Nodes über den Index verwaltet. Beim Löschen tritt nun das Problem auf, dass ein Node erst gelöscht werden kann, wenn zuvor evtl. vorhandene Untereinträge (Childs) gelöscht wurden.

Bei vielen verschachtelten Einträgen dauert das komplette Löschen einer Baumstruktur einige Zeit.

Mit dem API SendMessageLong lässt sich sehr schnell die komplette Baumstruktur löschen, ohne erst alle Nodes prüfen zu müssen.

Public Declare Function SendMessageLong Lib "user32" Alias "SendMessageA" _
        (ByVal hWnd As Long, ByVal msg As Long, ByVal wParam As _
        Long, ByVal lParam As Long) As Long 

Der Aufruf kann z.B. innerhalb der Userform über das Click-Ereignis einer Schaltfläche erfolgen. Dazu wird dem Aufruf als Parameter die Zugriffsnummer (hWnd) des Controls mitgegeben.
Diese hWnd-Eigenschaft steht normalerweise in der VBA-Umgebung für die OLE-Container-Steuerelemente nicht zur Verfügung, wird aber durch das Control als Eigenschaft mitgeliefert.

TreeView.ClearTreeView (UserForm1.TreeView1.hWnd)

Beispiel zum Setzen und Löschen von TreeView-Nodes (es wird eine Userform mit dem TreeView-Control und zwei Schaltflächen benötigt):

Private Sub CommandButton1_Click()  
' Treeview füllen  
For i = 1 To 10
 Set nodX = TreeView1.Nodes.Add(, , "_" & Str(i), i)
 For j = 1 To 100
  Set ctrTree = TreeView1.Nodes.Add("_" & Str(i), tvwChild, Str(i) & Str(j), j)
 Next j
Next i
End Sub 
Private Sub CommandButton2_Click()  
' Treeview löschen  
ClearTreeView Me.TreeView1.hWnd
End Sub  

Über die Schaltfläche CommandButton1 wird die Baumstruktur mit 10 Einträgen á 100 Untereinträgen gefüllt und mit CommandButton2 wieder gelöscht.


 Besucher: 2 online  |  60 heute  |  2421 diesen Monat  |  2149430 insgesamt | Seitenaufrufe: 71   Letzte Änderung: 24.06.2006 © 2001-18 Christian Freßdorf
  Logiker, die philosophieren, sind scharfsinnige Irre.
R. Vollmann
 powered by phpCMS and PAX