如何使ListViewItem文本的一部分变为粗体?

时间:2012-08-23 11:39:16

标签: c# winforms listview text text-styling

我在详细信息模式下有一个ListView,我希望它的一些项目的文本以粗体显示(用于突出显示它在项目文本中找到一些子字符串的位置)。

这样的事情:

Somefilename /的 boldText /等

有没有办法做到这一点?

2 个答案:

答案 0 :(得分:3)

好的,所以这很难,因为您必须首先将OwnerDraw设置为ListView,然后将该属性设置为true。既然你已经完成了这项工作,那么你需要实现DrawColumnHeader并将这一行放在其中:

e.DrawDefault = true;

接下来,您需要在DrawItemDrawSubItem中实施以下代码,具体取决于它所在的区域。 请记住我提供的代码你没有完全完成,因为它没有解析字符串或任何东西而且你现在还需要实现绘制一个选定的项目,因为你自己绘制文本。

var boldFont = new Font(this.Font, FontStyle.Bold);
var location = new PointF(e.Bounds.Location.X, e.Bounds.Location.Y);

e.Graphics.DrawString("Somefilename/", this.Font, Brushes.Black, location);
var size = e.Graphics.MeasureString("Somefilename/", this.Font);

location.X += size.Width;
e.Graphics.DrawString("boldText", boldFont, Brushes.Black, location);
size = e.Graphics.MeasureString("boldText", boldFont);

location.X += size.Width;
e.Graphics.DrawString("/etc", this.Font, Brushes.Black, location);

另外需要注意的是,你必须稍微使用偏移,因为某些字体有边距,粗体字体会占用更多空间。

如果Item不是SubItem,那么只需为e.DrawDefault = true;事件实施DrawSubItem - 如果该项目是SubItem然后为DrawItem实现该行。

答案 1 :(得分:2)

你必须覆盖OnPaint。试试这些链接:

Make portion of a Label's Text to be styled bold

Custom ListView in Winforms?

但是,listview不是由.net框架绘制的,只是支持。因此,即使您重写OnPaint,也可能不会调用它。因此,您可能还必须覆盖listview控件。