vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Schützen Sie Ihre Software vor Software-Piraterie - mit sevLock 1.0 DLL!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

Fortgeschrittene Programmierung
TreeView füllen, durchsuchen, Node öffnen 
Autor: Dirk.B
Datum: 28.09.11 09:55

Guten Morgen zusammen!

Ich hatte mir mal ein kleines Tool unter VB bzw VBA geschrieben, in dem ich
Zeicheblöcke verwalte.
Das funktioniert auch soweit prima.
Nun möcte ich dieses um eine Suchfunktion in dem TreeView ergänzen.
Das TreeView wird aus einem Ordner auf unserem Server befüllt.
Hier ist eine gewisse Struktur hinterlegt mit entsprechenden Vornummern, wie z.B.:
Bloecke
-> 1_Platten
-> 2_...
-> 3_Möbelbeschläge
-> 30_allgemeine_Möbelbeschläge
-> 300_Topfbänder_Holztüren
-> 301_Bänder_Glastüren
-> 302_Klappenscharniere
-> ...

Diese Struktur wird mit folgendem Code so ins TreeView übernommen:
Private Sub UserForm_Initialize()
...
' Alle Ordner in C: anzeigen
Call LoadWithFolders(TreeView1, sDirectory, "O_zu", "O_auf")
End Sub
 
' Diese Funktion lädt die erste Ebene eines
' Verzeichnisses und gibt die Nodes als Collectionen
' zurück
Function LoadWithFolders(oTreeView As TreeView, _
  sDirectory As String, _
  sImage As String, _
  sExpandedImage As String) As Collection
 
  Dim vFolder         As Variant
  Dim oNode           As Node
  Dim coNodes         As New Collection
  Dim coFolders       As New Collection
 
  ' Unterordner holen
  Set coFolders = GetSubFolders(sDirectory)
  For Each vFolder In coFolders
    ' jeden Ordner mit Bild dem TreeView hinzufügen
    Set oNode = oTreeView.nodes.Add(, tvwLast, , vFolder, sImage)
 
    ' Icon setzen, wenn es aufgeklappt wird
    oNode.ExpandedImage = sExpandedImage
    Call coNodes.Add(oNode)
  Next vFolder
  Set LoadWithFolders = coNodes
End Function
 
' Diese Funktion fügt alle Unterordner eines Verzeichnisses
' dem TreeView hinzu und das gleiche nochmal für jeden
' Unterordner (damit das '+' zum expandieren auch da
' ist)
Function AddFolders(oTreeView As TreeView, _
  oParentNode As Node, _
  sDirectory As String, _
  sImage As String, _
  sExpandedImage As String) As Collection
...
End Function
 
' Diese Funktion fügt alle Unterordner eines
' Verzeichnisses hinzu.
' Hierbei werden alle Nodes erstmal gelöscht, damit
' auch immer alles aktuell bleibt
Function AddSubFolders(oTreeView As TreeView, _
  oParentNode As Node, _
  sDirectory As String, _
  sImage As String, _
  sExpandedImage As String) As Collection
...
End Function
 
' Diese  Funktion löscht alle Childnodes eines
' Node-Objekts
Sub DeleteChildNodes(oTreeView As TreeView, _
  oNode As Node)
 
  Dim x               As Long
  Dim oChildNode      As Node
  Dim oNextNode       As Node
 
  ' 1. Childnode
  Set oChildNode = oNode.Child
  For x = 1 To oNode.Children
    ' Nächstes Childnode "merken"
    Set oNextNode = oChildNode.Next
 
    ' Childnode löschen
    Call oTreeView.nodes.Remove(oChildNode.Index)
 
    ' Gehe zu nächstem Childnode
    Set oChildNode = oNextNode
  Next x
End Sub
 
' Diese Funktion ermittelt die Unterordner eines
' Verzeichnisses und gibt deren Namen in einer
' Collection zurück
Function GetSubFolders(sDirectory As String) As Collection
...
End Function
 
' Diese Funktion überprüft, ob es sich bei dem
' übergebenen Verzeichnis um einen existierenden
' Ordner handelt
Function ExistDir(sdir As String) As Boolean
  ' Falls Verzeichnis nicht vorhanden ist
  On Error Resume Next
  ExistDir = ((GetAttr(sdir) And vbDirectory)) And (Err = 0)
  On Error GoTo 0
End Function
Könnte man das auch noch einfacher schreiben?

So nun zu meinem aktuellen Problem.
Nun möchte ich in dem TreeView eine Schuchfunktion einbauen.
Dazu gebe ich in einer Textbox einen Wert / Text ein.
Sind aber alle Knoten des TreeView geschlossen passiert gar nichts.
Erst wenn ich zuvor alle Konten geöffnet habe, findet er z.B. "Topfbänder".
Ist das entsprechende ChildView gefunden, soll es markiert werden und ein Klick
darauf erfolgen bzw. simuliert werden, so das der Inhalt des Ordners in einem ListView
angezeigt werden.

Private Sub cmdsuchen_Click()
Dim Suchbegriff As String
Dim i As Integer
 
Suchbegriff = TB_Suchen.Text
 
With TreeView1
    For i = 1 To .nodes.Count
        If UCase(.nodes(i).Text) Like "*" & UCase(Suchbegriff) & "*" Then
        .SetFocus
        .nodes(i).EnsureVisible
        .nodes(i).Selected = True
        .nodes(i).Expanded = True
        End If
    Next i
End With
End Sub
Ich hoffe ich konnte es albwegs erklären worauf es mir ankommt.
Für Hilfe wäre ich wie immer sehr dankbar.

Noch ne Frage.
Kann man auch irgendwie Bilder zu einem Beitrag anhängen?

VG

Dirk

alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
TreeView füllen, durchsuchen, Node öffnen5.807Dirk.B28.09.11 09:55
Re: TreeView füllen, durchsuchen, Node öffnen3.998Dirk28.09.11 10:29
Re: TreeView füllen, durchsuchen, Node öffnen4.006Dirk.B28.09.11 11:09
Re: TreeView füllen, durchsuchen, Node öffnen4.075Dirk28.09.11 11:39
Re: TreeView füllen, durchsuchen, Node öffnen4.273Dirk.B06.10.11 07:15
Re: TreeView füllen, durchsuchen, Node öffnen4.103Dirk.B07.10.11 09:56
Re: TreeView füllen, durchsuchen, Node öffnen4.108Dirk07.10.11 14:08
Re: TreeView füllen, durchsuchen, Node öffnen3.889Dirk.B12.10.11 21:19

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
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.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel