0

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

ListBox 项的背景颜色(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();
    }

-谢谢

4

2 回答 2

0

考虑为此使用所有者绘制控件

工作量更大,因为您需要渲染所有列表内容。但是您将拥有完全的灵活性。

于 2013-01-17T00:27:35.937 回答
0

您只需要将列表框的 Draw_item 事件挂钩到 lbReports_DrawItem 处理程序。您可以通过在列表框的属性中设置它来做到这一点。

另一件事是将 DrawMode 设置为 OwnerDrawFixed

于 2013-01-17T01:05:21.707 回答