- 有沒有辦法給列表框項目的部分上色(不僅是整行)? 例如列表框項目由5個字組成,只有一個是有色的或3個5.
- 有沒有一種方法可以對ListView執行相同操作? (我知道ListView可以爲每列着色,但我想在一列中有多種顏色)。
我只對免費解決方案感興趣,並且首選他們並不沉重地實施或更改當前使用情況(儘量不引入彩色ListBox代替普通的ListBox)。在C#WinForms中爲Listbox/ListView行的部分着色的方法?
與問候,
MadBoy
我只對免費解決方案感興趣,並且首選他們並不沉重地實施或更改當前使用情況(儘量不引入彩色ListBox代替普通的ListBox)。在C#WinForms中爲Listbox/ListView行的部分着色的方法?
與問候,
MadBoy
This article告訴我們如何使用帶有DrawMode的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單獨調用。您必須用每個單詞的x,y位置或邊界矩形替換e.bounds。
同樣的方法應該適用於ListView。
沒有內置的支持這種類型的修改到一個WinForms ListBox
或ListView
API。這當然是可能的,但解決方案將涉及大量的自定義繪畫,並可能覆蓋WndProc。這將是一個非常複雜且沉重的解決方案。
如果這種類型的經驗對您的應用程序很重要,我認爲您應該非常認真地考慮WPF作爲解決方案。 WPF旨在提供這種類型的眼睛糖果,並有可能在網絡上的許多樣本讓你啓動和運行。
是的,我非常熱衷於使用WPF,但是我應該在1年前選擇WPF,而不是現在當它是90k行代碼(其中GUI是30k行)。移植到WPF將是一個真正的時間殺手。 – MadBoy
只是一個觀察:據我所知,這可以防止當Control的內容太大時出現自動水平滾動條('HorizontalScrollbar = true;')。 – Pooven