Back to Devexpress

How to: Custom Paint ListBoxControl's Items

windowsforms-9456-controls-and-libraries-editors-and-simple-controls-examples-how-to-custom-paint-listboxcontrols-items.md

latest2.6 KB
Original Source

How to: Custom Paint ListBoxControl's Items

  • Oct 25, 2019

The following sample code handles the BaseListBoxControl.DrawItem event to custom paint odd and even list box items. The event handler also custom paints the currently selected item.

csharp
using DevExpress.XtraEditors;

private void listBoxControl1_DrawItem(object sender, DevExpress.XtraEditors.ListBoxDrawItemEventArgs e) {
    Brush evenItemBackBrush = Brushes.WhiteSmoke;
    Brush oddItemBackBrush = Brushes.LightBlue;
    Brush selectedItemBackBrush = Brushes.SteelBlue;
    string itemText = (sender as ListBoxControl).GetItemText(e.Index);
    if ((e.State & DrawItemState.Selected) != 0) {
        e.Cache.FillRectangle(selectedItemBackBrush, e.Bounds);
        using (Font f = new Font(e.Appearance.Font.Name, e.Appearance.Font.Size, FontStyle.Bold)) {
            e.Cache.DrawString(itemText, f, Brushes.White, e.Bounds, e.Appearance.GetStringFormat());
        }
        e.Handled = true;
        return;
    }
    if (e.Index % 2 == 0) {
        e.Cache.FillRectangle(evenItemBackBrush, e.Bounds);
    }
    else {
        e.Cache.FillRectangle(oddItemBackBrush, e.Bounds);
    }
    e.Cache.DrawString(itemText, e.Appearance.Font, Brushes.Black, e.Bounds, e.Appearance.GetStringFormat());
    e.Handled = true;
}
vb
Private Sub ListBoxControl1_DrawItem(sender As Object, e As DevExpress.XtraEditors.ListBoxDrawItemEventArgs) Handles ListBoxControl1.DrawItem
    Dim evenItemBackBrush As Brush = Brushes.WhiteSmoke
    Dim oddItemBackBrush As Brush = Brushes.LightBlue
    Dim selectedItemBackBrush As Brush = Brushes.SteelBlue
    Dim itemText As String = (TryCast(sender, ListBoxControl)).GetItemText(e.Index)
    If (e.State And DrawItemState.Selected) <> 0 Then
        e.Cache.FillRectangle(selectedItemBackBrush, e.Bounds)
        Using f As Font = New Font(e.Appearance.Font.Name, e.Appearance.Font.Size, FontStyle.Bold)
            e.Cache.DrawString(itemText, f, Brushes.White, e.Bounds, e.Appearance.GetStringFormat())
        End Using
        e.Handled = True
        Return
    End If
    If e.Index Mod 2 = 0 Then
        e.Cache.FillRectangle(evenItemBackBrush, e.Bounds)
    Else
        e.Cache.FillRectangle(oddItemBackBrush, e.Bounds)
    End If
    e.Cache.DrawString(itemText, e.Appearance.Font, Brushes.Black, e.Bounds, e.Appearance.GetStringFormat())
    e.Handled = True
End Sub