| |
Fortgeschrittene ProgrammierungTreeView 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 | |
TreeView füllen, durchsuchen, Node öffnen | 5.807 | Dirk.B | 28.09.11 09:55 | Re: TreeView füllen, durchsuchen, Node öffnen | 3.998 | Dirk | 28.09.11 10:29 | Re: TreeView füllen, durchsuchen, Node öffnen | 4.006 | Dirk.B | 28.09.11 11:09 | Re: TreeView füllen, durchsuchen, Node öffnen | 4.075 | Dirk | 28.09.11 11:39 | Re: TreeView füllen, durchsuchen, Node öffnen | 4.273 | Dirk.B | 06.10.11 07:15 | Re: TreeView füllen, durchsuchen, Node öffnen | 4.103 | Dirk.B | 07.10.11 09:56 | Re: TreeView füllen, durchsuchen, Node öffnen | 4.108 | Dirk | 07.10.11 14:08 | Re: TreeView füllen, durchsuchen, Node öffnen | 3.889 | Dirk.B | 12.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 |
|
|
sevISDN 1.0
Überwachung aller eingehender Anrufe!
Die DLL erkennt alle über die CAPI-Schnittstelle eingehenden Anrufe und teilt Ihnen sogar mit, aus welchem Ortsbereich der Anruf stammt. Weitere Highlights: Online-Rufident, Erkennung der Anrufbehandlung u.v.m. Weitere InfosTipp des Monats Neu! sevCommand 4.0
Professionelle Schaltflächen im modernen Design!
Mit nur wenigen Mausklicks statten auch Sie Ihre Anwendungen ab sofort mit grafischen Schaltflächen im modernen Look & Feel aus (WinXP, Office, Vista oder auch Windows 8), inkl. große Symbolbibliothek. Weitere Infos
|