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? |