ListBox内の項目の色を個別に設定する(オーナードローによる) (SNo.112) | |
使用コントロール | Button1 ListBox1 |
その他条件 | WindowsXP(Vista) Visual Basic 2005(VB2008) |
★ ListBox内の項目の色を個別に設定する(オーナードローによる)
Private Sub Button1_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Button1.Click ''文字色を設定(オーナードローで) 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 '項目が選択されていない場合文字色を指定の色で描画 Select Case e.Index Mod 4 Case 0 myBrush = Brushes.Red Case 1 myBrush = Brushes.Blue Case 2 myBrush = Brushes.Yellow Case 3 myBrush = Brushes.Green End Select Else '選択されている場合はそのままの文字色で myBrush = New SolidBrush(e.ForeColor) End If '指定した位置に、指定した Brush オブジェクトと 'Font オブジェクトで、指定した文字列を描画 e.Graphics.DrawString(ListBox1.Items(e.Index), e.Font, myBrush, _ New RectangleF(e.Bounds.X, e.Bounds.Y, e.Bounds.Width, e.Bounds.Height)) '描画されている項目に Focus がある場合は、フォーカスを示す四角形を描画する e.DrawFocusRectangle() End Sub 別途、下記のような表示データをご用意下さい。 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 |
|
実行結果 |