ABOUT Visual Basic Programmieren Programmierung Download Downloads Tips & Tricks Tipps & Tricks Know-How Praxis VB VBA Visual Basic for Applications VBS VBScript Scripting Windows ActiveX COM OLE API ComputerPC Microsoft Office Microsoft Office 97 Office 2000 Access Word Winword Excel Outlook Addins ASP Active Server Pages COMAddIns ActiveX-Controls OCX UserControl UserDocument Komponenten DLL EXE
Diese Seite wurde zuletzt aktualisiert am 29.03.2001

Diese Seite wurde zuletzt aktualisiert am 29.03.2001
Aktuell im ABOUT Visual Basic-MagazinGrundlagenwissen und TechnologienKnow How, Tipps und Tricks rund um Visual BasicActiveX-Komponenten, Controls, Klassen und mehr...AddIns für die Visual Basic-IDE und die VBA-IDEVBA-Programmierung in MS-Office und anderen AnwendungenScripting-Praxis für den Windows Scripting Host und das Scripting-ControlTools, Komponenten und Dienstleistungen des MarktesRessourcen für Programmierer (Bücher, Job-Börse)Dies&Das...

Themen und Stichwörter im ABOUT Visual Basic-Magazin
Code, Beispiele, Komponenten, Tools im Überblick, Shareware, Freeware
Ihre Service-Seite, Termine, Job-Börse
Melden Sie sich an, um in den vollen Genuss des ABOUT Visual Basic-Magazins zu kommen!
Informationen zum ABOUT Visual Basic-Magazin, Kontakt und Impressum

Zurück...

TreeView-Inhalt komplett

Zurück...


Anzeige

(-hg) mailto:hg_treeviewcontents@aboutvb.de

Das Auslesen des Inhalts bzw. der Struktur eines TreeView-Steuerelements aus den Microsoft Common Controls in einen String (etwa zur Speicherung in einer Datei oder zum Kopieren in eine andere Anwendung) ist an sich recht einfach. Sie durchlaufen der Reihe nach alle Knoten und jeweils deren Kind-Knoten, und wiederum jeweils deren Kind-Knoten usw., bis Sie die Struktur in alle Verästelungen hinein abgegrast haben. Entsprechend der Tiefe eines Knotens in der Struktur fügen Sie Füllzeichen ein, etwa Tabulatorzeichen, um die Einrückung darzustellen oder das Einfügen in eine Tabelle zu ermöglichen.

Da Sie ja meistens nicht wissen können, wie umfangreich und wie tief die Knoten-Struktur angelegt ist, eignet sich am besten ein so genannter "rekursiver" Aufruf einer Prozedur. In dieser wird zunächst ein Knoten bearbeitet, und anschließend wird die gleiche Funktion für alle Kind-Knoten erneut aufgerufen. Enthält ein Knoten keine Kind-Knoten, wird der aktuelle Aufruf der Prozedur verlassen, ohne weiter in die Tiefe zu gehen.

Da eine TreeView-Struktur auf der obersten Ebene mehrere gleichberechtigte Knoten enthalten kann, also nicht unbedingt nur einen einzigen Stammknoten haben muss, werden im ersten Schritt zunächst vom ersten Knoten der obersten Ebene (dem Knoten mit dem Index 1 in der Nodes-Collection) ausgehend nacheinander dieser und dann dessen "Zwillinge" (Siblings) bearbeitet, bevor die Aufrufe der in die Tiefe der Struktur führenden rekursiven Prozedur erfolgt.

Der Hilfsfunktion TreeViewContents übergeben Sie im ersten Parameter das betreffende TreeView-Steuerelement. Dann folgt optional der Parameter IndentString, der das bzw. die Füllzeichen zur Darstellung der Tiefe enthält (Voreinstellung: vbTab). Im optionalen Parameter NodeSeparator geben Sie an, durch welche(s) Zeichen die Knoten in der resultierenden Auflistung voneinander getrennt werden sollen (Voreinstellung: Zeilentrennung = vbCrLf).

Falls Sie nicht die komplette Knoten-Struktur erfassen wollen, sondern erst die Struktur ab einem bestimmten Knoten, geben Sie diesen optional im Parameter StartNode an. In diesem Fall können Sie im optionalen Parameter IncludeStartNodeIndentation festlegen, ob auch die Tiefe dieses Startknotens durch Füllzeichen dargestellt werden soll. Im letzten optionalen Parameter ChildrenIfExpanded können Sie schließlich noch bestimmen, ob die Kind-Knoten samt der darunter liegenden weiteren Verzweigungen der Struktur nur dann erfasst werden sollen, wenn ein Knoten geöffnet ist (Expanded = True).

Public Function TreeViewContents(TreeView As TreeView, _
 Optional IndentString As String = vbTab, _
 Optional NodeSeparator As String = vbCrLf, _
 Optional StartNode As Node, _
 Optional ByVal IncludeStartNodeIndentation As Boolean, _
 Optional ByVal ChildrenIfExpanded As Boolean) As String

  Dim nNode As Node
  Dim nContents As String
  Dim nParts() As String
  Dim nIndentation As String
  Dim i As Integer
  
  With TreeView.Nodes
    If StartNode Is Nothing Then
      Set nNode = .Item(1)
      Do While Not (nNode Is Nothing)
        nContents = nContents & nNode.Text & NodeSeparator
        zNodes nNode, nContents, "", IndentString, NodeSeparator, _
         ChildrenIfExpanded
        Set nNode = nNode.Next
      Loop
    Else
      If IncludeStartNodeIndentation Then
        nParts = Split(StartNode.FullPath, TreeView.PathSeparator)
        If Len(IndentString) = 1 Then
          nIndentation = String(UBound(nParts), IndentString)
        Else
          For i = 0 To UBound(nParts) - 1
            nIndentation = nIndentation & IndentString
          Next 'i
        End If
      End If
      With StartNode
        nContents = nIndentation & .Text & NodeSeparator
        If ChildrenIfExpanded Then
          If .Expanded Then
            zNodes StartNode, nContents, nIndentation, _
             IndentString, NodeSeparator, ChildrenIfExpanded
          End If
        Else
          zNodes StartNode, nContents, nIndentation, _
           IndentString, NodeSeparator, ChildrenIfExpanded
        End If
      End With
    End If
  End With
  TreeViewContents = nContents
End Function

Private Sub zNodes(Node As Node, Contents As String, _
 ByVal Indentation As String, IndentString As String, _
 NodeSeparator As String, _
 ByVal ChildrenIfExpanded As Boolean)

  Dim nLine As String
  Dim nChild As Node
  
  With Node
    Set nChild = .Child
    Indentation = Indentation & IndentString
    If ChildrenIfExpanded Then
      If Not .Expanded Then
        Exit Sub
      End If
    End If
  End With
  Do While Not (nChild Is Nothing)
    Contents = Contents & Indentation & nChild.Text & NodeSeparator
    zNodes nChild, Contents, Indentation, IndentString, _
     NodeSeparator, ChildrenIfExpanded
    Set nChild = nChild.Next
  Loop
End Sub

Beispiel-Projekte (VB 5 und 6) und Modul modTreeViewContents (treeviewcontents.zip - ca. 7,2 KB)


Artikel
Zum Download-Bereich dieses Artikel
Mail an den Autor dieses Artikels

KnowHow
Zur KnowHow-Übersicht

KnowHow-Themen
Themen - Allgemeines
Themen - Entwicklungsumgebung (VB-IDE)
Themen - Forms
Themen - Steuerelemente (Controls)
Themen - Grafik
Themen - Dateien
Themen - UserControls
Themen - Einsteiger-Tipps
Themen - Wussten Sie...?

Übersicht nach Titeln in alphabetischer Reihenfolge
Übersicht nach Erscheinungsdatum

Schnellsuche




Zum Seitenanfang

Copyright © 1999 - 2017 Harald M. Genauck, ip-pro gmbh  /  Impressum

Zum Seitenanfang

Zurück...

Zurück...

Download Internet Explorer