我正试图找到一种方法来突出显示不同颜色的列表框项目的背景,并且遇到了这个四年前的封闭线程,它几乎回答了这里的问题:
Background color of a ListBox item (winforms)
我没有关注如何使用他的方法。因此,如果我创建了一个名为listBox1的对象和一个名为strSomeString的字符串变量,那么将strSomeString添加到带红色背景的listBox1的确切代码是什么?
在此处使用Shadow Wizard的代码:
private void lbReports_DrawItem(object sender, DrawItemEventArgs e)
{
e.DrawBackground();
bool selected = ((e.State & DrawItemState.Selected) == DrawItemState.Selected);
int index = e.Index;
if (index >= 0 && index < lbReports.Items.Count)
{
string text = lbReports.Items[index].ToString();
Graphics g = e.Graphics;
Color color = (selected) ? Color.FromKnownColor(KnownColor.Highlight) : (((index % 2) == 0) ? Color.White : Color.Gray);
g.FillRectangle(new SolidBrush(color), e.Bounds);
// Print text
g.DrawString(text, e.Font, (selected) ? reportsForegroundBrushSelected : reportsForegroundBrush,
lbReports.GetItemRectangle(index).Location);
}
e.DrawFocusRectangle();
}
-Thanks
答案 0 :(得分:0)
请考虑使用owner draw control。
这是更多的工作,因为你需要渲染所有列表内容。但你会有完全的灵活性。
答案 1 :(得分:0)
您只需将列表框的Draw_item事件挂钩到lbReports_DrawItem处理程序即可。 您可以通过将其设置为列表框的属性来实现。
另一件事是将DrawMode设置为OwnerDrawFixed