ヘッダー

VB.NET2002対応 VB.NET2003対応 VB2005対応

 

Visual Basic 中学校 > VB.NET サンプル > Windows.Forms.ListBox >

行ごとにアイコンを表示する

VB.NET2002対応 VB.NET2003対応 VB2005対応

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

    ListBox1.DrawMode = DrawMode.OwnerDrawFixed
    ListBox1.ItemHeight = 16

End Sub

Private Sub ListBox1_DrawItem(ByVal sender As Object, ByVal e As System.Windows.Forms.DrawItemEventArgs) Handles ListBox1.DrawItem

    '▼項目がない場合は何もしない

    If e.Index = -1 Then
        Exit Sub
   
End If

    '▼アイコンとブラシの用意

    Dim myBrush As Brush = New SolidBrush(ListBox1.ForeColor)
    Dim Icon As Drawing.Icon

    '描画するアイコンを3つごとに適当に決定
    '実際にはスピード向上のためアイコンを先に読み込んでおくことが望ましい。
   
Select Case e.Index Mod 3
        Case 0
            Icon =
New Drawing.Icon(Application.StartupPath & "\Icon1.ico")
       
Case 1
            Icon =
New Drawing.Icon(Application.StartupPath & "\Icon2.ico")
       
Case 2
            Icon =
New Drawing.Icon(Application.StartupPath & "\Icon3.ico")
    End
Select

    '▼描画実行

    e.DrawBackground()
    e.Graphics.DrawIcon(Icon,
New Rectangle(e.Bounds.X, e.Bounds.Y, 16, 16))
    e.Graphics.DrawString(ListBox1.Items(e.Index), e.Font, myBrush,
New RectangleF(e.Bounds.X + 16, e.Bounds.Y + 2, e.Bounds.Width, e.Bounds.Height))
    e.DrawFocusRectangle()

End Sub

メモ:このサンプルではEnabled = Falseの場合、およびSelectionMode = Noneの場合の配慮がされていません。