2012-08-23 91 views
1

我在詳細模式一個ListView,我想有一些項目文本的粗體(突出顯示在那裏找到的項目文本的一些子)。如何使ListViewItem文本的一部分變爲粗體?

因此,像這樣:

Somefilename/boldText /等

有沒有辦法做到這一點?

+2

WPF或WinForms的? –

+1

就像@KlausByskovHoffmann問,是它的窗口或網頁? – MaxDataSol

+0

對不起,忘了提及...它的WinForm應用程序 – bakua

回答

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

+0

謝謝:)這就是我一直在尋找的。但我仍然有1個問題。當我畫出我的文字時,它看起來很奇怪,字母線的含義較寬,帶有一些綠色輪廓。它看起來模糊,如果你知道我的意思:) – bakua

+0

而不是使用'Brushes.Black'你可以嘗試使用'SystemBrushes.WindowText'。但那是在黑暗中拍攝的,因爲我沒有遇到這種情況。 –

+0

它沒有幫助:(這裏是屏幕(頂部文本顯然是錯誤的繪製,但只要我選擇這個項目它正確,因爲一切都好)http://img607.imageshack.us/img607 /7375/screenuoa.png – bakua

2

你必須重寫的OnPaint。請點擊以下鏈接:

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

Custom ListView in Winforms?

但是,列表視圖不是由.NET Framework畫和僅支持。因此,即使您重寫OnPaint,也可能不會調用它。所以你可能不得不重寫你的listview控件。

+2

OnPaint絕對不會幫助你。你需要用ListView做很多工作來完成一些複雜的事情。以ObjectListView爲例。 – Grammarian

+0

這是正確的 - 我放置瞭如何繪製OP想要的文本的非常**的部分實現,但還有很多工作要做。 @Grammarian,如果你有更多的添加到我的文章,請隨時。 –

+0

誠然,.UseItemStyleForSubItems =假對每個項目進行設置。在我看來這是最合適的答案。 – Larry

相關問題