vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
SEPA-Dateien erstellen inkl. IBAN-, BLZ-/Kontonummernprüfung  
 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

VB.NET - Fortgeschrittene
Treeview 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?
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Treeview Knoten schließen 
Autor: ModeratorDieter (Moderator)
Datum: 05.02.19 15:23

Evtl.so:
Private Sub TreeView1_BeforeExpand(ByVal sender As Object, _
  ByVal e As System.Windows.Forms.TreeViewCancelEventArgs) 
  Handles TreeView1.BeforeExpand
 
  For Each Node As TreeNode In TreeView1.Nodes
    If Node.IsExpanded Then Node.Collapse()
  Next 
End Sub

_________________________
Professionelle Entwicklerkomponenten
www.tools4vb.de

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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!
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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?
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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?
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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?
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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