在Winforms中更改ListBox的“选定”颜色?

时间:2012-12-02 23:11:19

标签: c# winforms listbox

如何更改在Windows窗体中listbox中选择内容时出现的丑陋蓝色?我能找到的所有解决方案都包括重新创建整个控件,或者只使用WPF。在WinForms中有没有办法做到这一点?

2 个答案:

答案 0 :(得分:12)

将listBox的DrawMode设置为OwnerDrawFixed并订阅DrawItem个活动:

private void listBox_DrawItem(object sender, DrawItemEventArgs e)
{
    e.DrawBackground();
    Graphics g = e.Graphics;
    Brush brush = ((e.State & DrawItemState.Selected) == DrawItemState.Selected) ? 
                  Brushes.Red : new SolidBrush(e.BackColor);
    g.FillRectangle(brush, e.Bounds);
    e.Graphics.DrawString(listBox.Items[e.Index].ToString(), e.Font, 
             new SolidBrush(e.ForeColor), e.Bounds, StringFormat.GenericDefault); 
    e.DrawFocusRectangle();            
}

您可以通过检查事件参数的e.State属性来确定绘图项的状态。如果state为Selected,则使用您喜欢的任何画笔(例如红色)来填充项目行。

答案 1 :(得分:4)

编辑之前..(他询问ListView而不是ListBox)

ObjectListView:

ListView1.UseCustomSelectionColors = true;
ListView1.HighlightBackgroundColor = Color.Red; // for example :)
ListView1.UnfocusedHighlightBackgroundColor = Color.Red;

ListView:

myitem.BackColor = Color.Red;