- 有没有办法对ListBox项目的部分内容进行着色(不仅限于整行)?例如,列表框项目由5个单词组成,只有一个单词被着色或者5个单词中有3个被着色。
- 是否有办法在ListView中实现相同的效果?(我知道可以按列对ListView进行着色,但我希望在一列中有多种颜色)。
我只对免费解决方案感兴趣,并且希望它们不需要太大的实现或更改当前使用方式(最好只需少量努力即可将着色的ListBox引入替换普通的ListBox)。
祝好,
MadBoy
我只对免费解决方案感兴趣,并且希望它们不需要太大的实现或更改当前使用方式(最好只需少量努力即可将着色的ListBox引入替换普通的ListBox)。
祝好,
MadBoy
本文章讲述了如何使用ListBox的DrawItem,并将其设置为OwnerDraw值之一。基本上,你需要像这样做:
listBox1.DrawMode = OwnerDrawFixed;
listBox1.DrawItem += new System.Windows.Forms.DrawItemEventHandler(this.listBox1_DrawItem);
private void listBox1_DrawItem(object sender, DrawItemEventArgs e)
{
e.DrawBackground();
e.DrawFocusRectangle();
// TODO: Split listBox1.Items[e.Index].ToString() and then draw each separately in a different color
e.Graphics.DrawString(listBox1.Items[e.Index].ToString(),new Font(FontFamily.GenericSansSerif, 14, FontStyle.Bold),new SolidBrush(color[e.Index]),e.Bounds);
}
将单个DrawString调用替换为拆分listBox1.Items[e.Index].ToString()成单词,并为每个单词进行单独的DrawString调用。您需要为每个单词替换e.bounds为x、y位置或边界矩形。
对于ListView,同样的方法也适用。
没有内置的API支持对WinForms ListBox
或ListView
进行此类型的修改。虽然可以实现这一点,但解决方案将涉及大量自定义绘制和可能覆盖WndProc。这将是一个非常复杂和繁重的解决方案。
如果这种体验对您的应用程序很重要,我认为您应该非常认真地考虑WPF作为解决方案。 WPF旨在提供这种类型的视觉效果,并且可能有许多网络示例可帮助您快速上手。
Control
内容过大时自动出现水平滚动条(HorizontalScrollbar = true;
)。 - Pooven