| |
VB.NET - FortgeschritteneTreeview Knoten schließen | | | Autor: Dikn | Datum: 05.02.19 13:00 |
| Hallo!
Ich möchte bei Klick auf einen anderen Knoten den vorher geöffneten Knoten mit allen Unterknoten schließen.
Wie mache ich das? | |
Re: Treeview Knoten schließen | | | Autor: Manfred X | Datum: 05.02.19 16:36 |
| Hallo!
Wenn es darum geht, nur den zuvor per User-Dialog geöffneten
Knoten zu schließen, ist in dieser Routine auf eine formularglobal
deklarierte Treenode-Variable eine Referenz auf den zu öffnenden
Knoten zu setzen.
Enthält diese Variable allerdings bereits eine Referenz, ist zuvor
der entsprechende Knoten zu schließen. | |
Re: Treeview Knoten schließen | | | Autor: Dikn | Datum: 05.02.19 17:32 |
| Vielen Dank für Eure Vorschläge!
Aber...
Ich zeige mit dem TreeView1 nur Ordner/Unterordner an, die Bild- bzw. Video-Dateien enthalten.
z.B.: TreeView1:
C:\[---A] Klick auf -> [---B]
[---D]
[---E] Klick auf -> [---F] -> Bild.jpg
C:\[---G]
wenn ich jetzt auf [---G] klicke -> alle Unterordner von [---A] schließen und Unterordner von [---G] anzeigen | |
Re: Treeview Knoten schließen | | | Autor: Manfred X | Datum: 07.02.19 15:02 |
| Irgend so was?
Public Class frmTreeviewDemo
Dim WithEvents trv As New TreeView With
{.Parent = Me, .Size = New Drawing.Size(200, 500)}
Private Sub frmTreeviewDemo_Load(sender As Object,
e As EventArgs) Handles MyBase.Load
Me.Size = New Size(220, 550)
'Testdaten erstellen
Dim tn1, tn2, tn3 As TreeNode
For i As Integer = 65 To 70
tn1 = trv.Nodes.Add(Chr(i), Chr(i))
For k As Integer = 65 To 70
tn2 = tn1.Nodes.Add(Chr(i) & Chr(k), Chr(k))
For l As Integer = 65 To 70
tn3 = tn2.Nodes.Add(Chr(i) & Chr(k) & Chr(l), Chr(l))
For m = 65 To 70
tn3.Nodes.Add(Chr(m))
Next
Next
Next
Next
End Sub
Private Sub trv_BeforeExpand(sender As Object,
e As TreeViewCancelEventArgs) Handles trv.BeforeExpand
If e.Node.Parent Is Nothing Then
trv.CollapseAll()
Else
For Each tn As TreeNode In e.Node.Parent.Nodes
tn.Collapse()
Next
End If
End Sub
End Class | |
Re: Treeview Knoten schließen | | | Autor: Dikn | Datum: 07.02.19 17:47 |
| Vielen, vielen Dank an Manfred X !!!!
Funktioniert einwandfrei
Wieder ein klasse Tipp von Dir! | |
Re: Treeview Knoten schließen | | | Autor: Dikn | Datum: 19.03.19 13:01 |
| Hallo!
wie bekomme ich es hin, z.B. bei Klick auf Button den Unterordner D\C\E\B zu öffnen? | |
Re: Treeview Knoten schließen | | | Autor: Manfred X | Datum: 19.03.19 16:40 |
| Hallo!
Woher bekommt das Programm die Information,
welcher Treeview-Knoten bei einem Click auf
einen Button geöffnet werden soll? | |
Re: Treeview Knoten schließen | | | Autor: Dikn | Datum: 19.03.19 20:20 |
| Hallo Manfred X!
Der aktuelle Pfad wurde mit Klick auf Button1 ausgelesen und dann
in einer ini-Datei gespeichert -> z.B.: "C:\Ordner1\Unterordner1_2\Unterordner1_2_5"
Mit Klick auf Button2 soll der derzeit geöffnete Pfad geschlossen und der in der ini-Datei
gespeicherte Pfad wieder geöffnet werden
für Dein Beispiel: "D\C\E\B" öffnen | |
Re: Treeview Knoten öffnen | | | Autor: Manfred X | Datum: 19.03.19 21:25 |
| Du kannst nur einen Knoten öffnen,
der auch Unterknoten hat.
In meinem Beispiel besitzt D-C-E-B keine Unterknoten
und kann deshalb nicht geöffnet werden !!
In solchen Fällen kannst Du die Hierarchie bis
zum Parent-Knoten öffnen.
Im Prinzip gibt es zwei Möglichkeiten, die
Knotenlinie zu einem bestimmten Knoten zu öffnen.
Du speicherst entweder bereits beim Erstellen
der Treeview-Knoten eine Referenz zu dem gewünschen
Ini-Knoten oder du nutzt die Find-Methode der Treenode
Klasse.
Im Beispiel wird der Knoten D-C-E geöffnet (beide Versionen)
Public Class frmTreeviewDemo
Dim WithEvents trv As New TreeView With
{.Parent = Me, .Size = New Drawing.Size(200, 500)}
Dim WithEvents btnIni1 As New Button With
{.Parent = Me, .Left = 210, .Text = "Version1"}
Dim WithEvents btnIni2 As New Button With
{.Parent = Me, .Left = 210, .Text = "Version2", .Top = 40}
Dim IniPath As String
Dim IniNode As TreeNode
Private Sub frmTreeviewDemo_Load(sender As Object,
e As EventArgs) Handles MyBase.Load
Me.Size = New Size(300, 550)
IniPath = "DCE"
'Testdaten erstellen
Dim tn1, tn2, tn3, tn4 As TreeNode
For i As Integer = 65 To 70
tn1 = trv.Nodes.Add(Chr(i), Chr(i))
For k As Integer = 65 To 70
tn2 = tn1.Nodes.Add(Chr(i) & Chr(k), Chr(k))
For l As Integer = 65 To 70
tn3 = tn2.Nodes.Add(Chr(i) & Chr(k) & Chr(l), Chr(l))
If tn3.Name = IniPath Then
IniNode = tn3 'Referenz speichern
End If
For m = 65 To 70
tn3.Nodes.Add(Chr(m))
Next
Next l
Next k
Next i
End Sub
Private Sub trv_BeforeExpand(sender As Object,
e As TreeViewCancelEventArgs) Handles trv.BeforeExpand
If e.Node.Parent Is Nothing Then
trv.CollapseAll()
Else
For Each tn As TreeNode In e.Node.Parent.Nodes
tn.Collapse()
Next
End If
End Sub
Private Sub btnIni1_Click(sender As Object,
e As EventArgs) Handles btnIni1.Click
OpenNode(IniNode)
End Sub
Private Sub btnIni2_Click(sender As Object,
e As EventArgs) Handles btnIni2.Click
Dim nd() As TreeNode = trv.Nodes.Find(IniPath, True)
If nd.Length > 0 Then OpenNode(nd(0))
End Sub
Private Sub OpenNode(nd As TreeNode)
If nd Is Nothing Then Exit Sub
Dim ndl As New List(Of TreeNode)
With ndl
.Add(nd)
'Knotenlinie als Liste speichern
While .item(.Count - 1).Parent IsNot Nothing
.Add(.Item(.Count - 1).Parent)
End While
'Knotenlinie öffnen
For i As Integer = .Count - 1 To 0 Step -1
.Item(i).Expand()
Next i
End With
End Sub
End Class
Beitrag wurde zuletzt am 19.03.19 um 21:54:52 editiert. | |
Re: Treeview Knoten öffnen | | | Autor: Dikn | Datum: 23.03.19 09:04 |
| Hallo Manfred X!
Wenn auch verspätet (war wieder unterwegs) --> Vielen, vielen Dank!
Funktioniert jetzt wunderbar!!!
Imports System.IO
Public Class frmMain_1
Dim IniNode As TreeNode = Nothing
Public Class TreeNode
Inherits System.Windows.Forms.TreeNode
Public Path As String
End Class
Private Sub frmMain_1_Load (sender As Object, e As System.EventArgs) Handles _
Me.Load
Dim tn As TreeNode = Nothing
Dim nodeInfo As DirectoryInfo = New DirectoryInfo("C:\")
'setDrives()
For Each di As DirectoryInfo In nodeInfo.GetDirectories
If di.Attributes = FileAttributes.Directory Then
tn = AddNode(trvFolders.Nodes, di.Name, di.FullName)
If Directory.GetDirectories(tn.Path).Length > 0 Then
AddNode(tn.Nodes, ".", ".")
End If
End If
Next
End Sub
Private Sub btnPresetting_Show_Click (sender As System.Object, e As _
System.EventArgs) Handles btnPresetting_Show.Click
Call OpenNode(IniNode)
End Sub
Private Sub btnPresetting_Set_Click (sender As System.Object, e As _
System.EventArgs) Handles btnPresetting_Set.Click
IniNode = trvFolders.SelectedNode '.Parent
trvFolders.Focus
End Sub
Private Function AddNode (ByVal nodeCollection As TreeNodeCollection, ByVal _
Caption As String, ByVal path As String) As TreeNode
Dim tn As New TreeNode()
tn.Text = Caption
tn.Path = path
nodeCollection.Add(tn)
Return tn
End Function
Private Sub OpenNode (nd As TreeNode)
If nd Is Nothing Then Exit Sub
Dim ndl As New List(Of TreeNode)
With ndl
.Add(nd)
While .item(.Count - 1).Parent IsNot Nothing
.Add(.Item(.Count - 1).Parent)
End While
For i As Integer = .Count - 1 To 0 Step -1
.Item(i).Expand()
Next i
trvFolders.SelectedNode = IniNode
trvFolders.Focus
End With
End Sub
Private Sub trvFolders_BeforeExpand (sender As Object, e As _
TreeViewCancelEventArgs) Handles trvFolders.BeforeExpand
If e.Node.Parent Is Nothing Then
trvFolders.CollapseAll()
Else
For Each Node As TreeNode In e.Node.Parent.Nodes
Node.Collapse()
Next
End If
Dim tn As TreeNode = DirectCast(e.Node, TreeNode)
If DirectCast(tn.Nodes(0), TreeNode).Path = "." Then
createSubnodes(tn)
End If
End Sub
Private Sub CreateSubnodes _
(ByVal node As TreeNode)
Dim d As New DirectoryInfo(node.Path)
node.Nodes.Clear()
Dim tn As TreeNode = DirectCast(node, TreeNode)
Try
For Each di As DirectoryInfo In d.GetDirectories
'If getFiles(di.FullName) = True Then
tn = AddNode(node.Nodes, Path.GetFileName(di.FullName), di.FullName)
If Directory.GetDirectories(tn.Path).Length > 0 Then
AddNode(tn.Nodes, ".", ".")
End If
'End If
Next
Catch ex As Exception
End Try
End Sub
End Class | |
Re: Treeview Knoten schließen | | | Autor: Dikn | Datum: 04.05.19 13:06 |
| Hallo!
noch eine Frage:
beim Starten meines Programms werden in einer INI-Datei gespeicherte Einstellungen gesetzt
Wie kann ich den IniNode in der Ini-Datei speichern und wieder übergeben? | |
| 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 |
|
|
sevWizard für VB5/6
Professionelle Assistenten im Handumdrehen
Erstellen Sie eigene Assistenten (Wizards) im Look & Feel von Windows 2000/XP - mit allem Komfort und zwar in Windeseile :-) Weitere InfosTipp des Monats März 2024 Dieter OtterUTF-8 Konvertierung von Dateien und StringsVB6 selbst verfügt über keine Funktionen zur UTF-8 Konvertierung von Daten. Mit Hilfe des ADODB.Stream-Objekts lassen sich diese fehlenden Funktionen aber schnell nachrüsten. Access-Tools Vol.1
Über 400 MByte Inhalt
Mehr als 250 Access-Beispiele, 25 Add-Ins und ActiveX-Komponenten, 16 VB-Projekt inkl. Source, mehr als 320 Tipps & Tricks für Access und VB
Nur 24,95 EURWeitere Infos
|