1. 程式人生 > >美化combox 用法 —— 為其新增圖片,改變顯示方式

美化combox 用法 —— 為其新增圖片,改變顯示方式

對C# 中Combox控制元件的一些簡單的操作,改變其顯示特性,主要是改變其中的項的屬性

我們需要注意的是:每次為Combox新增項的時候,就會觸發DrawItem事件,而我們正是通過DrawItem來改變Combox的顯示特性的

  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.ComponentModel;  
  4. using System.Data;  
  5. using System.Drawing;  
  6. using System.Linq;  
  7. using System.Text;  
  8. using System.Windows.Forms;  
  9. using System.Collections;  
  10. namespace Combox_Image  
  11. {  
  12.     public partial class Form1 : Form  
  13.     {  
  14.         ArrayList brushArray = new ArrayList() ;  
  15.         ArrayList fontArray = new ArrayList() ;  
  16.         public Form1()  
  17.         {  
  18.             InitializeComponent();  
  19.         }  
  20.         private
    void comboBox1_DrawItem(object sender, DrawItemEventArgs e)  
  21.         {  
  22.             //確定畫布
  23.             Graphics g = e.Graphics;  
  24.             //繪製區域
  25.             Rectangle r = e.Bounds;  
  26.             Font fn = null;  
  27.             if (e.Index >= 0)  
  28.             {  
  29.                 //設定字型、字串格式、對齊方式
  30.                 fn = (Font)fontArray[e.Index];  
  31.                 string s = (string)comboBox1.Items[e.Index];  
  32.                 StringFormat sf = new StringFormat();  
  33.                 sf.Alignment = StringAlignment.Near;  
  34.                 //根據不同的狀態用不同的顏色表示
  35.                 if (e.State == (DrawItemState.NoAccelerator | DrawItemState.NoFocusRect))  
  36.                 {  
  37.                     e.Graphics.FillRectangle(new SolidBrush(Color.Red), r);  
  38.                     e.Graphics.DrawString(s, fn, new SolidBrush(Color.Black), r, sf);  
  39.                     e.DrawFocusRectangle();  
  40.                 }  
  41.                 else
  42.                 {  
  43.                     e.Graphics.FillRectangle(new SolidBrush(Color.LightBlue), r);  
  44.                     e.Graphics.DrawString(s, fn, new SolidBrush(Color.Red), r, sf);  
  45.                     e.DrawFocusRectangle();  
  46.                 }  
  47.             }  
  48.         }  
  49.         privatevoid Form1_Load(object sender, EventArgs e)  
  50.         {  
  51.             fontArray.Add(new Font("Ariel", 8, FontStyle.Bold));  
  52.             fontArray.Add(new Font("Courier", 8, FontStyle.Italic));  
  53.             fontArray.Add(new Font("Veranda", 8, FontStyle.Bold));  
  54.             fontArray.Add(new Font("System", 8, FontStyle.Strikeout));  
  55.             fontArray.Add(new Font("Century SchoolBook", 8, FontStyle.Underline));  
  56.             fontArray.Add(new Font("Helevctia", 8, FontStyle.Italic));  
  57.             //建立畫刷
  58.             brushArray.Add(new SolidBrush(Color.Red));  
  59.             brushArray.Add(new SolidBrush(Color.Blue));  
  60.             brushArray.Add(new SolidBrush(Color.Green));  
  61.             brushArray.Add(new SolidBrush(Color.Yellow));  
  62.             brushArray.Add(new SolidBrush(Color.Black));  
  63.             brushArray.Add(new SolidBrush(Color.Azure));  
  64.             brushArray.Add(new SolidBrush(Color.Firebrick));  
  65.             brushArray.Add(new SolidBrush(Color.DarkMagenta));  
  66.             brushArray.Add(new SolidBrush(Color.DarkTurquoise));  
  67.             brushArray.Add(new SolidBrush(Color.Khaki));  
  68.             //畫comboBox1,注意它要呼叫comboBox1_DrawItem來畫
  69.             comboBox1.Items.Add("中國");  
  70.             comboBox1.Items.Add("巴西");  
  71.             comboBox1.Items.Add("哥斯大黎加");  
  72.             comboBox1.Items.Add("土耳其");  
  73.             comboBox1.Items.Add("韓國");  
  74.             comboBox1.Items.Add("日本");  
  75.             //畫comboBox2,注意它要呼叫comboBox2_DrawItem來畫
  76.             comboBox2.Items.Add("");  
  77.             comboBox2.Items.Add("");  
  78.             comboBox2.Items.Add("");  
  79.             comboBox2.Items.Add("");  
  80.             comboBox2.Items.Add("");  
  81.             comboBox2.Items.Add("");  
  82.             comboBox2.Items.Add("");  
  83.             comboBox2.Items.Add("");  
  84.             comboBox2.Items.Add("");  
  85.             comboBox2.Items.Add("");  
  86.             //畫comboBox3,注意它要呼叫comboBox3_DrawItem來畫
  87.             comboBox3.Items.Add("趙微");  
  88.             comboBox3.Items.Add("舒淇");  
  89.             comboBox3.Items.Add("諶豹");  
  90.             comboBox3.Items.Add("鄭巧玲");  
  91.         }  
  92.         privatevoid comboBox2_DrawItem(object sender, DrawItemEventArgs e)  
  93.         {  
  94.             Graphics g = e.Graphics;  
  95.             Rectangle r = e.Bounds;  
  96.             if (e.Index >= 0)  
  97.             {  
  98.                 //設定字串前矩形塊rd的大小
  99.                 Rectangle rd = r;  
  100.                 rd.Width = rd.Left + 20;  
  101.                 Rectangle rt = r;  
  102.                 r.X = rd.Right;  
  103.                 //用不同的顏色畫矩形塊
  104.                 SolidBrush b = (SolidBrush)brushArray[e.Index];  
  105.                 g.FillRectangle(b, rd);  
  106.                 //設定字串的格式
  107.                 StringFormat sf = new StringFormat();  
  108.                 sf.Alignment = StringAlignment.Near;  
  109.                 if (e.State == (DrawItemState.NoAccelerator | DrawItemState.NoFocusRect))  
  110.                 {  
  111.                     //字串背景
  112.                     e.Graphics.FillRectangle(new SolidBrush(Color.White), r);  
  113.                     //顯示字串
  114.                     e.Graphics.DrawString(b.Color.Name, new Font("Ariel", 8, FontStyle.Bold), new SolidBrush(Color.Black), r, sf);  
  115.                     //繪製取得焦點時的虛線框
  116.                     e.DrawFocusRectangle();  
  117.                 }  
  118.                 else
  119.                 {  
  120.                     e.Graphics.FillRectangle(new SolidBrush(Color.LightBlue), r);  
  121.                     e.Graphics.DrawString(b.Color.Name, new Font("Veranda", 8, FontStyle.Bold), new SolidBrush(Color.Red), r, sf);  
  122.                     e.DrawFocusRectangle();  
  123.                 }  
  124.             }  
  125.         }  
  126.         privatevoid comboBox3_DrawItem(object sender, DrawItemEventArgs e)  
  127.         {  
  128.             Graphics g = e.Graphics;  
  129.             Rectangle r = e.Bounds;  
  130.             Size imageSize = imageList1.ImageSize;  
  131.             Font fn = null;  
  132.             if (e.Index >= 0)  
  133.             {  
  134.                 fn = (Font)fontArray[0];  
  135.                 string s = (string)comboBox3.Items[e.Index];  
  136.                 StringFormat sf = new StringFormat();  
  137.                 sf.Alignment = StringAlignment.Near;  
  138.                 if (e.State == (DrawItemState.NoAccelerator | DrawItemState.NoFocusRect))  
  139.                 {  
  140.                     //畫條目背景
  141.                     e.Graphics.FillRectangle(new SolidBrush(Color.Red), r);  
  142.                     //繪製圖像
  143.                     imageList1.Draw(e.Graphics, r.Left, r.Top, e.Index);  
  144.                     //顯示字串
  145.                     e.Graphics.DrawString(s, fn, new SolidBrush(Color.Black), r.Left + imageSize.Width, r.Top);  
  146.                     //顯示取得焦點時的虛線框
  147.                     e.DrawFocusRectangle();  
  148.                 }  
  149.                 else
  150.                 {  
  151.                     e.Graphics.FillRectangle(new