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内の項目の色を個別に設定]のプログラムを少し変更して、背景の色を描画したものです。複数の色で描画したり、指定の行だけ色を付ける等色々工夫してみて下さい。 |