玄関へお回り下さい。
ListBoxの背景色を1行飛びに設定する (1個)             (SNo.110)
使用コントロール ListBox1 
その他条件 WindowsXP(Vista) Visual Basic 2005(VB2008)
 
★ オーナードローでListBoxの背景色を1行飛びに設定する
 
Private Sub Form1_Load(ByVal sender As System.Object, _
                       ByVal e As System.EventArgs) Handles MyBase.Load
    With ListBox1
        .Items.Add("あいうえお  アイウエオ")
        .Items.Add("かきくけこ  カキクケコ")
        .Items.Add("さしすせそ  サシスセソ")
        .Items.Add("たちつてと  タチツテト")
        .Items.Add("なにぬねの  ナニヌネノ")
        .Items.Add("はひふへほ  ハヒフヘホ")
        .Items.Add("まみむめも  マミムメモ")
        .Items.Add("や  ゆ  よ  ヤ  ユ  ヨ")
        .Items.Add("らりるれろ  ラリルレロ")
        .Items.Add("わをん      ワヲン")
    End With
End Sub

Private Sub Button1_Click(ByVal sender As System.Object, _
                          ByVal e As System.EventArgs) Handles Button1.Click
'1行飛びに背景色を設定(オーナードローで)
    If ListBox1.DrawMode = DrawMode.OwnerDrawFixed Then
        ListBox1.DrawMode = DrawMode.Normal
    Else
        ListBox1.DrawMode = DrawMode.OwnerDrawFixed
    End If
End Sub

Private Sub listBox1_DrawItem(ByVal sender As System.Object, ByVal e As _
            System.Windows.Forms.DrawItemEventArgs) Handles ListBox1.DrawItem
' オーナー描画の ListBox 項目を作成(ヘルプに同様のサンプルあり)
    '項目が選択された場合は強調表示
    e.DrawBackground()
    Dim myBrush As Brush
    If (e.State And DrawItemState.Selected) <> DrawItemState.Selected Then
        '項目が選択されていない場合背景色を指定の色で描画
        If (e.Index Mod 2) = 1 Then
            e.Graphics.FillRectangle(Brushes.LightPink, New RectangleF( _
                        e.Bounds.X, e.Bounds.Y, e.Bounds.Width, e.Bounds.Height))
        End If
    End If
    '指定した位置に、指定した Brush オブジェクトと 
    'Font オブジェクトで、指定した文字列を描画
    e.Graphics.DrawString(ListBox1.Items(e.Index), e.Font, New SolidBrush(e.ForeColor), _
                New RectangleF(e.Bounds.X, e.Bounds.Y, e.Bounds.Width, e.Bounds.Height))
    '描画されている項目に Focus がある場合は、フォーカスを示す四角形を描画する
    e.DrawFocusRectangle()
End Sub
 
         実行結果
       

サンプル集の見直しのついでに、No.112 の[オーナードローによるListBox内の項目の色を個別に設定]のプログラムを少し変更して、背景の色を描画したものです。複数の色で描画したり、指定の行だけ色を付ける等色々工夫してみて下さい。




2004/07/26


VBレスキュー(花ちゃん)
VB.NET2003  VB2005