1

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

所以是这样的:

一些文件名/粗体文本/等

有没有办法做到这一点?

4

2 回答 2

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不是 aSubItem那么只需e.DrawDefault = true;DrawSubItem事件实现 - 反之亦然,如果项目是 aSubItem然后为 实现该行DrawItem

于 2012-08-23T12:26:31.190 回答
2

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

将标签文本的一部分设置为粗体

Winforms中的自定义ListView?

但是,列表视图不是由 .net 框架绘制的,仅受支持。因此,即使您覆盖 OnPaint,它也可能不会被调用。因此,您可能还必须覆盖您的列表视图控件。

于 2012-08-23T12:14:37.067 回答