製作多色列表框(Multi-color ListBox)

最近在做一個程序,設置了一個ListBox,在裏面不斷的更新消息,在WinForm的ListBox中默認的顏色只能是單色的,但我需要不同的消息用不同的顏色顯示,默認的ListBox就不能勝任了。經過一番研究之後,通過代碼成功地實現了。其核心就是不用系統默認的ListBox繪製函數,而是自己重寫。

首先在窗體設計器中將ListBox的DrawMode屬性改爲OwnerDrawFixed,或是直接在代碼的合適位置中添加如下代碼:

this.ListBoxDemo.DrawMode = DrawMode.OwnerDrawFixed;

這個屬性的作用在MSDN裏的解釋是“控件中的所有元素都是手動繪製的,並且元素大小都相等”,意思就是允許用編程人員用代碼編寫控件繪製。

然後就寫ListBox的DrawItem事件的處理函數:

private void ListBoxDemo_DrawItem(object sender, DrawItemEventArgs e)
{
    
string s = ((ListBox)sender).Items[e.Index].ToString(); //獲取該條目要顯示的文字
    Color vColor;    
    
switch (s[0])
    
{
        
case 'w':vColor = Color.Red;s = s.Substring(1);break;  //warn 
        case 's':vColor = Color.Blue; s = s.Substring(1); break;  //success
        case 'f':vColor = Color.Green; s = s.Substring(1); break;  //fail
        default: vColor = Color.Black; break;
    }

    e.Graphics.DrawString(s, e.Font, 
new SolidBrush(vColor), e.Bounds); //繪製條目
    e.DrawFocusRectangle();
}

注:本例中不同類型的消息用不同的顏色繪製,“警告”消息用紅色、“成功”消息用藍色、“失敗”消息用綠色。每種消息之前都用一個字符表示,表明不同的消息種類。然後用Substring(1)方法來去掉第一個字符,以此來正常顯示。以下爲效果圖:

用不同顏色顯示ListBox中的Items

用類似的方法還可已設置成間隔的顏色來提高美觀度。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章