Hallo!
Sieht so aus, als benötigst Du ein OwnerDraw-Listview,
bei dem an der Stelle der Item-Checkboxen das entsprechende
Image gezeichnet werden soll.
Das könnte etwa so aussehen (im Form_load der Demo Dateien
unterschiedlichen Typs angeben, damit die ImageListe gefüllt wird):
Imports System.Windows.Forms
Imports System
Public Class frmFilesList
Dim WithEvents livmain As New ListView With _
{.Parent = Me, .Dock = DockStyle.Fill}
Dim imlmain As New ImageList
Private Sub frmFilesList_Load(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles MyBase.Load
'Einige Icons listen
imlmain.Images.Add("normal", Me.Icon)
imlmain.Images.Add _
("text", System.Drawing.Icon.ExtractAssociatedIcon(<textdatei>))
imlmain.Images.Add _
("jpg", System.Drawing.Icon.ExtractAssociatedIcon(<jpg-Datei>))
livmain.SmallImageList = imlmain
'Listview einrichten
livmain.CheckBoxes = True
livmain.MultiSelect = False
livmain.View = View.SmallIcon
livmain.OwnerDraw = True
'Liste mit Angaben zu Files füllen
Dim direc As String = _
My.Computer.FileSystem.SpecialDirectories.MyDocuments
Dim z As Integer = -1
For Each file As String In My.Computer.FileSystem.GetFiles _
(direc, Microsoft.VisualBasic.FileIO.SearchOption.SearchTopLevelOnly, _
"*.*")
z += 1
Dim lv As ListViewItem
Dim fi As New IO.FileInfo(file)
lv = livmain.Items.Add(fi.Name)
lv.SubItems.Add(fi.LastWriteTime.ToString)
lv.SubItems.Add(fi.Extension)
lv.ImageIndex = z Mod 3 'Imageindex
Next file
End Sub
Private Sub livmain_DrawItem(ByVal sender As Object, _
ByVal e As System.Windows.Forms.DrawListViewItemEventArgs) _
Handles livmain.DrawItem
'Hintergrundfarbe setzen
If Not (e.State And ListViewItemStates.Selected) = 0 Then
e.Graphics.FillRectangle(Drawing.Brushes.LightGray, e.Bounds)
e.DrawFocusRectangle()
Else
e.Graphics.FillRectangle(Drawing.Brushes.White, e.Bounds)
End If
'Item-Image an Checkboxposition zeichnen
If e.Item.ImageIndex >= 0 Then
Dim bmp As Drawing.Bitmap = _
CType(imlmain.Images(e.Item.ImageIndex), Drawing.Bitmap)
e.Graphics.DrawImage(bmp, New Drawing.Point(e.Bounds.X, e.Bounds.Y))
End If
'Item-Text nach rechts versetzt zeichnen
Dim rect As Drawing.Rectangle = e.Bounds
rect.Offset(20, 0)
Using brs As New Drawing.SolidBrush(livmain.ForeColor)
e.Graphics.DrawString(e.Item.Text, livmain.Font, brs, rect)
End Using
End Sub
Private Sub livmain_ItemCheck(ByVal sender As Object, _
ByVal e As System.Windows.Forms.ItemCheckEventArgs) _
Handles livmain.ItemCheck
MessageBox.Show("Click auf Item-Index: " & CStr(e.Index) & _
" Icon-Index: " & CStr(livmain.Items(e.Index).ImageIndex))
End Sub
Private Sub livmain_SelectedIndexChanged(ByVal sender As Object, _
ByVal e As System.EventArgs) Handles livmain.SelectedIndexChanged
If livmain.SelectedItems.Count > 0 Then
Me.Text = "Index-Wechsel zu " & livmain.SelectedItems(0).Text
End If
End Sub
End Class |