C# 如何将ListViewItem的部分文本设置为粗体?

C# 如何将ListViewItem的部分文本设置为粗体?,c#,winforms,listview,text,text-styling,C#,Winforms,Listview,Text,Text Styling,我有一个详细信息模式的列表视图,我希望它的一些项目文本用粗体显示(用于突出显示它在项目文本中找到的一些子字符串) 比如说: Somefilename/粗体文本/etc 有办法吗?您必须覆盖OnPaint。请尝试以下链接: 但是,listview不是由.net framework绘制的,只受支持。因此,即使覆盖OnPaint,也可能不会调用它。因此,您可能还必须重写listview控件。您必须重写OnPaint。请尝试以下链接: 但是,listview不是由.net framework绘制

我有一个详细信息模式的列表视图,我希望它的一些项目文本用粗体显示(用于突出显示它在项目文本中找到的一些子字符串)

比如说:

Somefilename/粗体文本/etc


有办法吗?

您必须覆盖OnPaint。请尝试以下链接:


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

您必须重写OnPaint。请尝试以下链接:


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

好的,这将很困难,因为您必须首先将该属性设置为
true
,以
OwnerDraw
您的
listview
。现在您已经完成了,需要实现
DrawColumnHeader
,并将这一行放在其中:

e.DrawDefault = true;
接下来,您需要在
DrawItem
DrawSubItem
中实现以下代码,具体取决于它所在的区域请记住,我给您的代码没有完全完成,因为它没有解析字符串或任何东西,而且您现在仍然需要实现绘制选定项,因为您自己绘制文本。

另一件需要注意的事情是,您必须稍微调整偏移量,因为某些字体有边距,粗体字体占用更多空间


如果
不是
子项
,则只需实现
e.DrawDefault=trueDrawSubItem
事件,使用code>,反之亦然,如果该项是
子项
,则为
DrawItem
实现该行。好的,这将是一件困难的事情,因为您必须首先通过将该属性设置为
true
OwnerDraw
您的
列表视图
。现在您已经完成了,需要实现
DrawColumnHeader
,并将这一行放在其中:

e.DrawDefault = true;
接下来,您需要在
DrawItem
DrawSubItem
中实现以下代码,具体取决于它所在的区域请记住,我给您的代码没有完全完成,因为它没有解析字符串或任何东西,而且您现在仍然需要实现绘制选定项,因为您自己绘制文本。

另一件需要注意的事情是,您必须稍微调整偏移量,因为某些字体有边距,粗体字体占用更多空间



如果
不是
子项
,则只需实现
e.DrawDefault=trueDrawSubItem
事件,执行code>,如果该项是
子项,则执行
DrawItem

的那一行,就像@KlausByskovHoffmann所问的那样,是windows还是web?对不起,忘记提及这一点了。。。它的WinForm应用程序在使用GDI之前您是否绘制过文本?因为这就是你必须要做的。看看这个问题的答案,就像@KlausByskovHoffmann问的一样,是windows还是web?对不起,忘了提那个。。。它的WinForm应用程序在使用GDI之前您是否绘制过文本?因为这就是你要做的。看这个问题的答案,油漆肯定对你没有帮助。要完成如此复杂的任务,您必须使用ListView进行大量工作。以ObjectListView为例,这是正确的——我将如何绘制OP想要的文本放在了一个非常部分的实现中,但是还有很多工作要做@语法学家,如果您有更多的内容要添加到我的帖子中,请随意。如果是,则必须为每个项目设置.UseItemStyleForSubItems=false。在我看来,这是最合适的答案。OnPaint绝对帮不了你。要完成如此复杂的任务,您必须使用ListView进行大量工作。以ObjectListView为例,这是正确的——我将如何绘制OP想要的文本放在了一个非常部分的实现中,但是还有很多工作要做@语法学家,如果您有更多的内容要添加到我的帖子中,请随意。如果是,则必须为每个项目设置.UseItemStyleForSubItems=false。这是我认为最合适的答案。谢谢:)这就是我一直在寻找的。但我还有一个问题。当我画我的文字时,它看起来很奇怪,因为字母线更宽,有点像绿色的轮廓。如果您知道我的意思,它看起来很模糊:)而不是使用
画笔。黑色
您可以尝试使用
系统画笔。WindowText
。但这是一个黑暗中的镜头,因为我没有经历过。它没有帮助:(这是它的屏幕(上面的文本显然绘制错误,但一旦我选择了这个项目,它就会正确,因为一切正常)正常的ListView是使用GDI呈现的,它往往更清晰。DrawString()使用GDI+,它有很多优点,但看起来不同。在进行任何文本渲染之前,请确保告诉GDI+使用ClearType渲染:g.TextRenderingHint=System.Drawing.text.TextRenderingHint.ClearTypeGridFit;感谢语法学家,totaly为我工作:)但是我不得不使用System.Drawing.Text.TextRenderingHint.AntiAliasGridFit,而不是ClearTypeGridFit,这对我来说不适用。谢谢:)这就是我要找的。但我还有一个问题。当我画我的文字时,它看起来很奇怪,因为字母线更宽,有点像绿色的轮廓。如果您知道我的意思,它看起来很模糊:)而不是使用
画笔。黑色
您可以尝试使用
系统画笔。WindowText
。但这是一个在黑暗中拍摄的镜头,因为我没有经历过。它没有帮助:(这是它的屏幕(顶部文本显然是wr)