【发布时间】:2012-12-02 23:11:18
【问题描述】:
当您在 Windows 窗体中的 listbox 中选择某些内容时,如何更改难看的蓝色?我能找到的所有解决方案要么包括重新创建整个控件,要么只使用 WPF。有没有办法在 WinForms 中做到这一点?
【问题讨论】:
当您在 Windows 窗体中的 listbox 中选择某些内容时,如何更改难看的蓝色?我能找到的所有解决方案要么包括重新创建整个控件,要么只使用 WPF。有没有办法在 WinForms 中做到这一点?
【问题讨论】:
将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 属性来确定绘图项的状态。如果状态为Selected,则使用您喜欢的任何画笔(例如红色)来填充项目行。
【讨论】:
在编辑之前..(他问的是 ListView 而不是 ListBox)
对象列表视图:
ListView1.UseCustomSelectionColors = true;
ListView1.HighlightBackgroundColor = Color.Red; // for example :)
ListView1.UnfocusedHighlightBackgroundColor = Color.Red;
列表视图:
myitem.BackColor = Color.Red;
【讨论】: