Hallo Manfred X!
Vielen Dank für Deine schnelle Antwort!
Mit „Ansicht“ meine ich:
Beim Hinzufügen/Entfernen eines Laufwerks soll im TreeView [trvFolders] die Markierung des ausgewählten Eintrags bestehen bleiben
Wie geht das?
Was kann vereinfacht verbesset werden?
Imports System.IO
Public Class Form1
Dim strSelItem As String
Dim intTypArr(,) As String
Const WM_DEVICECHANGE As Integer = &H219
Const DBT_DEVICEARRIVAL As Integer = &H8000
Const DBT_DEVICEREMOVECOMPLETE = &H8004
Public Class TreeNode
Inherits System.Windows.Forms.TreeNode
Public Path As String
End Class
Public Declare Function LockWindowUpdate Lib "user32.dll" (ByVal hWndLock As _
IntPtr) As Boolean '???
Protected Overloads Overrides Sub WndProc(ByRef msg As Message)
MyBase.WndProc(msg)
If msg.Msg = WM_DEVICECHANGE AndAlso msg.WParam = CType(DBT_DEVICEARRIVAL, _
IntPtr) Then
frmInfo.TextBox1.Text = vbNewLine & "neuen Datenträger erkannt"
frmInfo.intTime = 1
frmInfo.Show
Call setDrives()
cbDrives.SelectedItem = strSelItem
strSelItem = Me.cbDrives.SelectedItem
End If
If msg.Msg = WM_DEVICECHANGE AndAlso msg.WParam = CType( _
DBT_DEVICEREMOVECOMPLETE, IntPtr) Then
frmInfo.TextBox1.Text = vbNewLine & "Datenträger wurde entfernt"
frmInfo.intTime = 1
frmInfo.Show
Call setDrives()
If InStr(strSelItem, "E:") Then
cbDrives.SelectedIndex = 0
strSelItem = Me.cbDrives.SelectedItem
Call setFolders(strSelItem.Substring(strSelItem.Length-3, 2) & "\")
trvFolders.Focus
Else
cbDrives.SelectedItem = strSelItem
End If
End If
End Sub
Private Sub Me_Load(sender As Object, e As System.EventArgs) Handles Me.Load
Call setDrives()
cbDrives.SelectedIndex = 0
strSelItem = Me.cbDrives.SelectedItem
Call setFolders(Directory.GetLogicalDrives.First)
End Sub
Private Sub cbDrives_DrawItem (ByVal sender As Object, ByVal e As _
System.Windows.Forms.DrawItemEventArgs) Handles cbDrives.DrawItem
If Me.cbDrives.DroppedDown = True AND (e.State And DrawItemState.Selected) = _
DrawItemState.Selected Then
e.Graphics.FillRectangle(SystemBrushes.Control, e.Bounds)
Else
e.Graphics.FillRectangle(SystemBrushes.Window, e.Bounds)
End If
If intTypArr Is Nothing Then Exit Sub
e.Graphics.DrawImage(ImageList2.Images.Item(CInt(intTypArr(e.Index,1))), 4, _
e.Bounds.Top + 1)
e.Graphics.DrawString(cbDrives.Items(e.Index).ToString, cbDrives.Font, _
Brushes.Black, 20, e.Bounds.Top + 1)
End Sub
Private Sub cbDrives_DropDownClosed (sender As Object, e As System.EventArgs) _
Handles cbDrives.DropDownClosed
Me.trvFolders.Nodes.Clear
strSelItem = Me.cbDrives.SelectedItem
Call setFolders(strSelItem.Substring(strSelItem.Length-3,2) & "\")
trvFolders.Focus
End Sub
Private Sub setFolders(strLW As String)
Dim tn As TreeNode = Nothing
Dim nodeInfo As DirectoryInfo = New DirectoryInfo(strLw)
Try
trvFolders.Nodes.Clear
For Each di As DirectoryInfo In nodeInfo.GetDirectories
If di.Attributes = FileAttributes.Directory Then
tn = AddNode(trvFolders.Nodes, di.Name, di.FullName)
If My.Computer.FileSystem.GetDirectories(tn.Path).Count > 0 Then
AddNode(tn.Nodes, ".", ".")
End If
End If
Next
Catch ex As Exception
End Try
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 |