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 10.05.2000

Diese Seite wurde zuletzt aktualisiert am 10.05.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 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...

Knotenketten knüpfen

Zurück...


Anzeige

(-hg) mailto:hg_addnode@aboutvb.de

Wenn Sie in einem TreeView-Steuerelement den Pfad eines Eltern-Knotens kennen, in den Sie einen weiteren Knoten einfügen möchten, müssen Sie zunächst diesen Eltern-Knoten ausfindig machen. Sie durchlaufen dazu die Nodes-Collection und prüfen bei jedem Knoten, ob dessen FullPath-Eigenschaft mit dem gegebenen Pfad übereinstimmt. Ist dies der Fall, fügen Sie den neuen Knoten dort ein.

Die Hilfsfunktion AddNode erweitert die MSDN Library - VB Add (Nodes-Collection)Add-Methode der Nodes-Collection um die Möglichkeit, im Parameter Relative einen Pfad anzugeben. Zur Erkennung, ob Relative eine Pfadangabe darstellen soll, dienen die zusätzliche Konstanten tvwPath und tvwFullPath. Geben Sie tvwFullPath an, stellt der letzte Bestandteil des in Relative übergebenen Pfades bereits den Text-Namen des neuen Knotens und der Text-Parameter wird ignoriert Die übrigen Parameter gleichen der originalen Add-Methode. Dazu prüft die Funktion mittels der Hilfsfunktion CheckPath, ob ein konformer Pfad übergeben worden ist (die Pfadangabe darf nicht mit dem Pfadtrennzeichen beginnen oder enden) und passt ihn gegebenenfalls an.

Public Const tvwPath = 10
Public Const tvwFullPath = 11

Public Function AddNode(TreeView As TreeView, _
 Optional Relative As Variant, Optional RelationShip As Variant, _
 Optional Key As Variant, Optional Text As Variant, _
 Optional Image As Variant, Optional SelectedImage As Variant) _
 As Node

  Dim nParentNode As Node
  Dim nPath As String
  Dim nPathL As String
  Dim nPos As Integer
  Dim nText As String
  
  Select Case RelationShip
    Case tvwPath, tvwFullPath
      nPath = CheckPath(TreeView, CStr(Relative))
      With TreeView
        If tvwFullPath Then
          nPos = InStrRev(nPath, .PathSeparator)
          If nPos Then
            nText = Mid$(nPath, nPos + 1)
            nPath = Left$(nPath, nPos - 1)
          Else
            Set AddNode = .Nodes.Add(, , Key, nPath, Image, _
             SelectedImage)
            Exit Function
          End If
        Else
          nText = Text
        End If
        nPathL = LCase$(nPath)
        For Each nParentNode In .Nodes
          If LCase$(nParentNode.FullPath) = nPathL Then
            Set AddNode = .Nodes.Add(nParentNode.Key, tvwChild, Key, _
             nText, Image, SelectedImage)
            Exit Function
          End If
        Next
      End With
    Case Else
      On Error Resume Next
      Set AddNode = TreeView.Nodes.Add(Relative, RelationShip, Key, _
       Text, Image, SelectedImage)
  End Select
End Function

Public Function CheckPath(TreeView As TreeView, Path As String) _
 As String

  Dim nPath As String
  Dim nPathSeparator As String
  
  nPathSeparator = TreeView.PathSeparator
  If Left$(Path, 1) = nPathSeparator Then
    nPath = Mid$(Path, 2)
  Else
    nPath = Path
  End If
  If Right$(nPath, 1) = nPathSeparator Then
    nPath = Left$(nPath, Len(nPath) - 1)
  End If
  CheckPath = nPath
End Function

Die Funktion InstrRev steht leider erst ab Visual Basic 6 zur Verfügung. Für frühere VB-Versionen können Sie die in Retourkutsche"Retourkutsche" vorgestellte Ersatzfunktion verwenden.

Wenn Sie die Technik verwenden, den vollen Pfad eines jeden Knotens als Schlüssel für denselbigen zu vergeben (wie in Knotenpfade knüpfen"Knotenpfade knüpfen" beschrieben), brauchen Sie den Eltern-Knoten nicht erst zu suchen, sondern können ihn direkt anhand der Pfadangabe bestimmen. Darüber hinaus können Sie dann sogar Pfade in beliebiger Tiefe angeben, die noch gar nicht existieren, und dafür sorgen, dass der gesamte Pfad in einem Rutsch angelegt wird.

Diese Aufgabe löst die Funktion AddNodeAutoKey. Auch hier können Sie einen Knoten wie gewohnt einfügen oder im Parameter Relative über die Konstanten tvwPath die Übergabe des Pfades eines Eltern-Knotens festlegen bzw. über tvwFullPath einen Pfad, der den Text-Namen des Knotens bereits enthält. Im letzten optionalen Parameter AddFullPath legen Sie nun noch fest, ob gegebenenfalls der Pfad komplett angelegt werden soll, falls er noch nicht existieren sollte (voreingestellt ist True).

Public Function AddNodeAutoKey(TreeView As TreeView, _
 Optional Relative As Variant, Optional RelationShip As Variant, _
 Optional Text As Variant, Optional Image As Variant, _
 Optional SelectedImage As Variant, _
 Optional ByVal AddFullPath As Boolean = True) As Node

  Dim nParentNode As Node
  Dim nNewNode As Node
  Dim nPath As String
  Dim nPos As Integer
  Dim nText As String
  
  Select Case RelationShip
    Case tvwPath, tvwFullPath
      nPath = CheckPath(TreeView, CStr(Relative))
      With TreeView
        If RelationShip = tvwFullPath Then
          nPos = InStrRev(nPath, .PathSeparator)
          If nPos Then
            nText = Mid$(nPath, nPos + 1)
            nPath = Left$(nPath, nPos - 1)
          Else
            Set nNewNode = .Nodes.Add(, , nPath, nPath, Image, _
             SelectedImage)
            If Not (nNewNode Is Nothing) Then
              With nNewNode
                .Key = .FullPath
              End With
              Set AddNodeAutoKey = nNewNode
            End If
            Exit Function
          End If
        Else
          nText = Text
        End If
        On Error Resume Next
        Set nParentNode = .Nodes(nPath)
        On Error GoTo 0
        If nParentNode Is Nothing Then
          If AddFullPath Then
            nPos = InStrRev(nPath, .PathSeparator)
            If nPos Then
              Set nParentNode = AddNodeAutoKey(TreeView, nPath, _
               tvwFullPath, Image, SelectedImage)
            Else
              Set nParentNode = .Nodes.Add(, , nPath, nPath, Image, _
               SelectedImage)
            End If
          End If
        End If
        If Not (nParentNode Is Nothing) Then
          Set nNewNode = .Nodes.Add(nParentNode.Key, tvwChild, , _
           nText, Image, SelectedImage)
          If Not (nNewNode Is Nothing) Then
            With nNewNode
              .Key = .FullPath
            End With
            Set AddNodeAutoKey = nNewNode
          End If
        End If
      End With
    Case Else
      Set nNewNode = TreeView.Nodes.Add(Relative, RelationShip, , _
       Text, Image, SelectedImage)
      If Not (nNewNode Is Nothing) Then
        With nNewNode
          .Key = .FullPath
        End With
        Set AddNodeAutoKey = nNewNode
      End If
  End Select
End Function

Modul modAddNode (modAddNode.bas - ca. 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