例如,如果在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
因此左边的第一个世界将是红色的。 我想将它添加到每个项目中。
答案 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);
}
}