Access 2010 Treeview

Hallo Leute,

ich bin momentan dabei in ein Formular bei Access ein Treeview einzufügen. Zum einen soll mir dieses Treeview einen bestimmten Pfad auslesen und alle darin enthaltenen Dateien anzeigen.
Das klappt soweit auch ganz gut, aber:
Zum anderen möchte ich jetzt beliebige Daten darin markieren können um diese dann zu öffnen. (Also ähnlich wie ein Windows-Explorer)

Wie aber kann ich nun genau diese markieten Punkte ansprechen und über welchen Befehl kann ich sie öffnen?
Ich habe bisher versucht es über ein Doppelklick-Event auszuführen und auch über einen extra Knopf, aber beides brachte mich nicht weiter.
Ich hoffe ihr könnt mir weiterhelfen :frowning:

Hallo Freeman,

mal zwei Tipps, ich lese hier im VB-Brett fleißig mit und kann dir
sagen, zu Access-Vba hat sich hier noch nie ein Experte gemeldet.
Aber ich gehe davon aus Rainer (VB-Experte) hat deine Anfrage
mitgelesen und in VB gibt es ja auch Treeview.

Und da das Einlesen von Dateien ja nix Access-spezielles ist
warte hier noch paar Tage ab ob hilfreiche Lösungen kommen.
Vielleicht so bis Di nächster Woche.
Wenn bis dahin nichts kam so bitte den hiesigen Mod deine
Anfrage ins Access-Brett zu verschieben.

Als zweiten Tipp, lade mal so eine Beispiel-.mdb hoch mit file-upload
in FAQ:2606
Da es ja wohl nur um Ordner auslesen geht kannste dadrin alles andere
löschen was man nicht braucht.

Wenn ich mich als Access-DAU dadran „versuchen“ soll so
sollte deine Beispiel-mdb im Format für 97-2003 gespeichert sein.

Und vorab mal gefragt, was genau willst du eigentlich?
Muß es Treeview sein? (Damit habe ich nämlich keine Erfahrung und
es kommt mir sehr kompliziert-seltsam vor)
„Reicht“ denn auch ein prinzipieller Nachbau des Win Explorers,
wo du einen Ordner auswählen kannst, Dateien darin werden aufgelistet,
du kannst mehrere markieren usw.?

Gruß
Reinhard

Treeview, die 2.
Moin,

der Blog aus der ersten Antwort sagt dazu wenig, war ein Fehlschuss :frowning:

Für die Knoten der Treeview stehen eigene Methoden bereit: ADD, DELETE, Expand, [Gegenteil von Expand]. Was mit den Objekten geschehen soll, die hinter den Knoten stehen, musst Du der Anwendung sagen.

Problem dabei: Erstmal rausfinden, was markiert wurde. Markieren ist kein Ereignis, also musst Du mit ItemSelected das markierte Element bestimmen und damit eine Prozedur versorgen, in der steht, was jetzt passieren soll.

Sind mehrere Elemente markiert, dann brauchts’s eine Schleife, die die Markierungen prüft:

Dim node As MSComctlLib.Node

for each node in Me.TreeView.Nodes
 if node.ItemSelected ...
 end if 
next node

Gruß Ralf

Hallo,

danke für die Antworten.
Ich habe jetzt den Vorschlag mal so aufgenommen und hätte die Schleife folgendermaßen aufgebaut:

Private Sub cmdOeffnen_Click()

For Each Node In tvwTreeview.Nodes
If Node.Checked = True Then
If file.Exists(tvwTreeview.SelectedNode.FullPath) Then
Shell tvwTreeview.SelectedNode.FullPath, vbNormalFocus
Else
End If
End If
Next

End Sub

Persönlich glaube ich, dass der Vorschlag gar nicht schlecht ist (auch wenn ich mich da natürlich gründlich irren könnte :wink:).
Aktuell kommt aber die Fehlermeldung: „Objekt unterstützt diese Eigenschaft oder Methode nicht“ wenn ich auf diese Weise versuche eine Datei zu öffnen.
Hättet ihr vielleicht noch einen Vorschlag für den Code?

@Reinhard
Ja, leider müsste es ein TreeView sein. Prinzipiell sollte es auch das gleiche können wir ein Explorer (Dateien auflisten und diese öffnen), aber eben als TreeView.

Hallo,

Also von Access oder worum es hier ging habe ich keine Ahnung :frowning:
Was mir aber an deinem Source auffällt ist folgendes.
Du durchläufst deine ganzen Knoten im Treeview. Aber was ist wenn ein Knoten noch Unterpunkte und die wiederrum Unterpunkte haben! Diese berücksichtigst du nicht. Lagere dazu den Source in eine Sub aus und rufe diese kursiv wieder auf!

Unter VB.Net würde ich das so lösen.

 'Klick auf ein Button
 Private Sub Button1\_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
 Dim L As New List(Of TreeNode) 'Eine Liste mit den Eintraegen
 If tventry.Nodes.Count = 0 Then Return 'Nur wenn Eintraege vorhanden
 Call GetEntrys(tventry.Nodes, L) 'Besorge uns alle sel. Eintraege
 For i As Integer = 0 To L.Count - 1 'Wir durchlaufen die Schleife mit den Eintraegen
 MessageBox.Show(L(i).FullPath) 'Wir lassen sie uns anzeigen
 Next
 End Sub

 'Das besorgen der Eintraege
 'Übergabe die Treenode Collection und die Liste wo sie eingetragen werden sollen
 Private Sub GetEntrys(ByVal t As TreeNodeCollection, ByRef L As List(Of TreeNode))
 For i As Integer = 0 To t.Count - 1 'Wir durchlaufen die Anzahl der Eintraege
 'Wenn der Knoten mind. 1 Unterpunkt hat rufen wir uns rekursiv auf
 If t(i).Nodes.Count \> 0 Then GetEntrys(t(i).Nodes, L)
 'Wenn nicht prüfen wir ob der Eintrag selektiert ist
 If t(i).IsSelected Then L.Add(t(i))
 Next
 End Sub

Du musst mal schauen welche Eigenschaften du hast. Kann sein das sich die ein oder andere bei dir anders schimpft.

Ich hoffe du kannst den Source ein wenig verstehen.

Gruss Alex