1. 程式人生 > >C#中動態修改ListBox的Item的顏色的方法

C#中動態修改ListBox的Item的顏色的方法

最近搞了C#需要在ListBox中顯示不同型別的資料,為了讓使用者容易區分,增加了顏色區分的功能,就是需要不同的型別資料顯示出不同的顏色。針對上述的要求我們需要使用控制元件的重繪方法,就是用重繪的方法啟用重繪事件,在重繪事件內修改Item的字型顏色。方法如下(基於DrawItem事件)

一、新建一個C#的視窗應用程式,在form1內新增一個ListBox控制元件,一個TextBox控制元件,一個按鈕控制元件;我們要求如下:按一次按鈕將文字框內的內容新增到ListBox內,並且ListBox在顯示的時候根據Item的內容顯示不同的顏色,比如新增的Item內包含了"你好",那麼這個Item用色來顯示;如果包含了"你壞"用

色來表示。介面如下圖所示:

、介面準備完成,我們需要對ListBox控制元件的屬性進行修改,才能使ListBox控制元件支援DrawItem的事件,我們要在ListBox控制元件的DrawMode】屬性修改為下圖中的任意一個,具體的區別還沒有深入研究,我選擇的是【OwnerDrawFixed】屬性,如下圖:

、還是要選中ListBox控制元件,在【事件】屬性欄內找到【DrawItem】事件,雙擊,便在CS檔案添加了該控制元件的DrawItem事件的處理函式。如下圖

、新增相應的處理【一】中需求的方法,比如按鈕事件,獲取文字框的文字並顯示在ListBox內;

五、詳細原始碼

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace TestListBoxColor
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        // ListBox DrawItem事件響應函式
        private void listBox1_DrawItem(object sender, DrawItemEventArgs e)
        {            
            if (e.Index >= 0)
            {
                e.DrawBackground();
                Brush mybsh = Brushes.Black;
                // 判斷是什麼型別的標籤
                if (listBox1.Items[e.Index].ToString().IndexOf("你好") != -1)
                {
                    mybsh = Brushes.Green;
                }
                else if (listBox1.Items[e.Index].ToString().IndexOf("你壞") != -1)
                {
                    mybsh = Brushes.Red;
                }
                // 焦點框
                e.DrawFocusRectangle();
                //文字 
                e.Graphics.DrawString(listBox1.Items[e.Index].ToString(), e.Font, mybsh, e.Bounds, StringFormat.GenericDefault);
            }     
        }

        private void button1_Click(object sender, EventArgs e)
        {
            string str = this.textBox1.Text;

            this.listBox1.Items.Add(str);
        }
    }
}
六、效果如下,當輸入“你好”並按新增按鈕的時候相應的ListBox的內容變為的綠色,輸入“你壞”的時候變為了紅色,達到了我們的要求目的:

OK,到此結束,希望對有這種需求的人有幫助。