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 03.04.2000

Diese Seite wurde zuletzt aktualisiert am 03.04.2000
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 IE, 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...

Knotenpfade knüpfen

Zurück...


Anzeige

(-hg) mailto:hg_nodepaths@aboutvb.de

Die Angabe eines Schlüssels ist zwar optional, wenn Sie in einem TreeView-Steuerelement einen Knoten hinzufügen. Doch ohne diese Schlüsselangabe ist es kaum möglich, einem anderen Knoten untergeordnete Knoten hinzuzufügen. Denn dazu ist in der Regel die Angabe des Schlüssels jenes übergeordneten Knotens notwendig.

Neben der freien Vergabe von wie auch immer generierten Schlüsseln wäre die automatische Generierung von fortlaufenden numerischen Schlüsseln eine Möglichkeit. Da das TreeView-Steuerelement allerdings im Gegensatz zur normalen Visual Basic-Collection keine reinen, lediglich als String übergebenen numerischen Schlüssel akzeptiert, muss diesem noch irgend ein String-Bestandteil hinzugefügt bzw. vorangestellt werden:

Dim Keys As Long

Keys = Keys + 1
TreeView.Nodes.Add [ParentKey], [tvwChild], "N" & Keys, [Text] ...

Zum Zugriff auf einen Knoten müssen Sie dann jedoch den gewünschten Schlüssel bereits kennen. Denn diese Art der Schlüsselzuweisung ist relativ willkürlich - aus ihr lässt sich durch nichts mehr auf die Struktur des Baumes oder die Position eines einzelnen Knoten schließen.

Der ideale Zugriff auf einen beliebigen Knoten wäre wohl ein Zugriff wie in einem Dateisystem, nämlich durch Angabe eines Pfades. Sie brauchen jedoch nicht alle Knoten in der Nodes-Collection der Reihe nach durchlaufen, um den Knoten zu finden, dessen FullPath-Eigenschaft mit dem gesuchten Pfad übereinstimmt. Einfacher ist es, der Key-Eigenschaft direkt nach dem Einfügen eines Knotens den Inhalt der FullPath-Eigenschaft automatisch zuzuweisen - zum Beispiel:

Dim ParentNode As Node
Dim AnyNode As Node

Set ParentNode = TreeView.Nodes.Add(, , , "C:")
With ParentNode
  .Key = .FullPath
End With
Set AnyNode = _
 TreeView.Nodes.Add(ParentNode.Key, tvwChild, , "Windows")
With AnyNode
  .Key = .FullPath
End With
With TreeView.Nodes.Add(AnyNode.Key, tvwChild, , "System")
  .Key = .FullPath
End With

Den Knoten "C:\Windows\System" finden Sie dann auf Anhieb:

Set Node = TreeView.Nodes("C:\Windows\System")

Wie Sie im obenstehenden Beispiel beim Einfügen des "System"-Knotens gesehen haben werden, brauchen Sie den von der Add-Methode der Nodes-Collection zurückgegebenen Knoten nicht unbedingt eigens einer Objekt-Variablen zuzuweisen, wenn Sie ihn in der Folge nicht weiter benötigen. Die Zuweisung des FullPath-Wertes als Schlüssel kann ohne Probleme in der gezeigten verkürzten Form erfolgen.

Der Zugriff auf einen Knoten über eine solche Pfadangabe funktioniert natürlich nur, solange nicht mittendrin der Name (Text-Eigenschaft) eines Elements geändert wird. Der gesuchte Pfad würde naturgemäß den geänderten Namen enthalten, und der gesuchte Knoten würde nicht gefunden. Daher müssen Sie nach einer Namensänderung die Schlüssel aller diesem Knoten untergeordneten Knoten anpassen. Vom Code her ist das kein großer Aufwand, wie die folgende rekursive Prozedur zeigt. Ist die Knotenstruktur unterhalb des betreffenden Knotens sehr tief und/oder weit verzweigt, kann das jedoch vielleicht einen kleinen Moment dauern - aber besonders spürbar wird das kaum sein.

Public Sub ResetPathKeys(FromNode As Node)
  Dim nChild As Node
  
  With FromNode
    .Key = .FullPath
    Set nChild = .Child
    Do While Not nChild Is Nothing
      ResetPathKeys nChild
      Set nChild = nChild.Next
    Loop
  End With
End Sub

Sie rufen diese Prozedur nach jeder Namensänderung auf und übergeben ihr den betroffenen Knoten. Falls Sie die direkte Änderung des Namens im TreeView-Steuerelement durch den Anwender erlauben (Eigenschaft LabelEdit gleich 1 - tvwManual), sollten Sie nicht vergessen, sie auch aus dem AfterLabelEdit-Ereignis heraus aufzurufen. Die Referenz des Knotens, dessen Name gerade geändert worden ist, finden Sie in der SelectedItem-Eigenschaft des TreeView-Steuerelements.

Private Sub TreeView_AfterLabelEdit(Cancel As Integer, _
 NewString As String)

    ResetKeys TreeView.SelectedItem
End Sub

Modul modNodePaths (modNodePaths.bas - ca. 0,5 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