如何在listView中为部分项目字符串着色?

时间:2017-01-29 09:49:45

标签: c# .net winforms

例如,如果在listView我有项目:

Hello world

然后我希望Hello为红色,世界为绿色

在表格的顶部我做了

listView1.OwnerDraw = true;

在设计师中我创建了listView绘制项目事件:

private void listView1_DrawItem(object sender, DrawListViewItemEventArgs e) {
    e.DrawBackground();
    e.DrawFocusRectangle();
}

我该怎么办? 我想要做的是将Red颜色添加到左侧的每个项目中,例如:

`Hello world`

世界Hello world

因此左边的第一个世界将是红色的。 我想将它添加到每个项目中。

1 个答案:

答案 0 :(得分:0)

实现目标的一种方法是通过ListBox.DrawItem Event。您可以在此函数的listbox中自定义字符串的呈现。

为该事件添加新的处理程序:

listBox1.DrawMode = DrawMode.OwnerDrawFixed;
listBox1.DrawItem += new System.Windows.Forms.DrawItemEventHandler(this.listBox1_DrawItem);

并在listbox中呈现文字:

private void listBox1_DrawItem(object sender, DrawItemEventArgs e)
{
    e.DrawBackground();
    e.DrawFocusRectangle();

    var itemStr = listBox1.Items[e.Index].ToString();
    var strings = itemStr.Split(' '); // Here I split item text
    var bound = e.Bounds;

    foreach (var s in strings)
    {
        var strRenderLegnth = e.Graphics.MeasureString(s, new Font(FontFamily.GenericSansSerif, 10)).Width;

        e.Graphics.DrawString // Draw each substring with customized settings
        (
            s,
            new Font(FontFamily.GenericSansSerif, 10),
            new SolidBrush(Color.Red), // Use verius colors for each substring
            bound
        );

        bound = new Rectangle(e.Bounds.X + (int)strRenderLegnth, e.Bounds.Y, e.Bounds.Width, e.Bounds.Height);
    }
}