C#继续列出框项目的颜色

时间:2013-01-17 00:22:00

标签: c#

我正试图找到一种方法来突出显示不同颜色的列表框项目的背景,并且遇到了这个四年前的封闭线程,它几乎回答了这里的问题:

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

2 个答案:

答案 0 :(得分:0)

请考虑使用owner draw control

这是更多的工作,因为你需要渲染所有列表内容。但你会有完全的灵活性。

答案 1 :(得分:0)

您只需将列表框的Draw_item事件挂钩到lbReports_DrawItem处理程序即可。 您可以通过将其设置为列表框的属性来实现。

另一件事是将DrawMode设置为OwnerDrawFixed