| |
VB.NET - FortgeschritteneTreeView - nur Ordner anzeigen | | | Autor: Dikn | Datum: 18.01.19 12:57 |
| Hallo,
wie kann ich in einem TreeView-Steuerelement nur die Ordner von einem vorgegebenem Laufwerk (z.B.: "C:\")
mit Image bzw. SelectedImage anzeigen. | |
Re: TreeView - nur Ordner anzeigen | | | Autor: Dikn | Datum: 19.01.19 11:52 |
| Danke HenryV für Deine schnelle Antwort!
Die Darstellung der Ordner funktioniert bei mir mit folgendem vereinfachtem Code einwandfrei (vb2010):
Imports System.IO
Public Class Form1
Public Class TreeNode
Inherits System.Windows.Forms.TreeNode
Public Path As String
End Class
Private Sub Button1_Click( sender As System.Object, e As System.EventArgs) _
Handles Button1.Click
Dim tn As TreeNode
tn = AddNode(Me.tvFolders.Nodes, "C:\", "C:\")
AddNode(tn.Nodes, ".", ".")
Call setSelection("C:\", tn)
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 setSelection (ByVal strPath As String, ByRef tn As TreeNode)
Dim strParentDir As String = Path.GetDirectoryName(strPath)
Dim i As Integer
Me.tvFolders.CollapseAll()
For i = 0 To Me.tvFolders.Nodes.Count - 1
If DirectCast(Me.tvFolders.Nodes(i), TreeNode).Path.ToUpper().StartsWith( _
strPath) Then
tn = DirectCast(Me.tvFolders.Nodes(i), TreeNode)
tn.Expand()
tn.EnsureVisible()
Me.tvFolders.SelectedNode = tn
Return
End If
Next
End Sub
Private Sub tvFolders_BeforeExpand (sender As Object, e As _
System.Windows.Forms.TreeViewCancelEventArgs) Handles tvFolders.BeforeExpand
Dim tn As TreeNode = DirectCast(e.Node, TreeNode)
If DirectCast(tn.Nodes(0), TreeNode).Path = "." Then Call CreateSubnodes(tn)
End Sub
Private Sub CreateSubnodes (ByVal node As TreeNode)
node.Nodes.Clear()
Dim d As New DirectoryInfo(node.Path)
For Each di As DirectoryInfo In d.GetDirectories
If di.Attributes = FileAttributes.Directory Then
Dim tn As TreeNode = DirectCast(node, TreeNode)
tn = AddNode(node.Nodes, Path.GetFileName(di.FullName), di.FullName)
If Directory.GetDirectories(di.FullName).Length > 0 Then AddNode( _
tn.Nodes, ".", ".")
tn.ImageIndex = 8
tn.SelectedImageIndex = 9
End If
Next
End Sub
Private Sub tvFolders_DrawNode (sender As Object, e As DrawTreeNodeEventArgs) _
Handles tvFolders.DrawNode
If Not e.Node.TreeView.Focused AndAlso e.Node.Equals( _
e.Node.TreeView.SelectedNode) Then
Dim treeFont As Font = If(e.Node.NodeFont, e.Node.TreeView.Font)
e.Graphics.FillRectangle(Brushes.Blue, e.Bounds)
ControlPaint.DrawFocusRectangle(e.Graphics, e.Bounds, _
SystemColors.HighlightText, SystemColors.Highlight)
TextRenderer.DrawText(e.Graphics, e.Node.Text, treeFont, e.Bounds, _
SystemColors.HighlightText, TextFormatFlags.GlyphOverhangPadding)
Else
e.DrawDefault = True
End If
End Sub aber: ich hätte gern die Darstellung ohne "C:" (also nur die Ordner in der ersten Spalte). wie mache ich das? | |
Re: TreeView - nur Ordner anzeigen | | | Autor: Dikn | Datum: 22.01.19 12:53 |
| So funktioniert's:
' ImageList1 Images: 0 (Symbol Ordner)
' 1 (Symbol geöffneter Ordner)
' Treeview1 - ImageList = "ImageList1"
' - ImageIndex = 0
' - SelectedImageIndex = 1
Imports System.IO
Public Class Form4
Dim strDrv As String = "C:\"
Public Class TreeNode
Inherits System.Windows.Forms.TreeNode
Public Path As String
End Class
Private Sub Form1_Load(sender As Object, e As System.EventArgs) Handles _
Me.Load
Dim tn As TreeNode = Nothing
Dim nodeinfo As IO.DirectoryInfo = New IO.DirectoryInfo(strDrv)
For Each di As DirectoryInfo In nodeinfo.GetDirectories()
If di.Attributes = FileAttributes.Directory Then
tn = AddNode(TreeView1.Nodes, di.Name, strDrv & di.Name)
If Directory.GetDirectories(di.FullName).Length > 0 Then AddNode( _
tn.Nodes, ".", ".")
End If
Next
End Sub
Private Sub TreeView1_BeforeExpand (sender As Object, e As _
System.Windows.Forms.TreeViewCancelEventArgs) Handles TreeView1.BeforeExpand
Dim tn As TreeNode = DirectCast(e.Node, TreeNode)
If DirectCast(tn.Nodes(0), TreeNode).Path = "." Then Call CreateSubnodes(tn)
End Sub
Private Sub CreateSubnodes (ByVal node As TreeNode)
Dim d As New DirectoryInfo(node.Path)
node.Nodes.Clear()
For Each di As DirectoryInfo In d.GetDirectories
If di.Attributes = FileAttributes.Directory Then
Dim tn As TreeNode = DirectCast(node, TreeNode)
tn = AddNode(node.Nodes, Path.GetFileName(di.FullName), di.FullName)
If Directory.GetDirectories(di.FullName).Length > 0 Then AddNode( _
tn.Nodes, ".", ".")
tn.ImageIndex = 0
tn.SelectedImageIndex = 1
End If
Next
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
End Class | |
| 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 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. Neu! sevDTA 3.0 Pro
SEPA mit Kontonummernprüfung
Erstellen von SEPA-Dateien mit integriertem BIC-Verzeichnis und Konto- nummern-Prüfverfahren, so dass ungültige Bankdaten bereits im Vorfeld ermittelt werden können. Weitere Infos
|