美化combox 用法 —— 為其新增圖片,改變顯示方式
阿新 • • 發佈:2019-01-06
對C# 中Combox控制元件的一些簡單的操作,改變其顯示特性,主要是改變其中的項的屬性
我們需要注意的是:每次為Combox新增項的時候,就會觸發DrawItem事件,而我們正是通過DrawItem來改變Combox的顯示特性的
- 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;
- using System.Collections;
- namespace Combox_Image
- {
- public partial class Form1 : Form
- {
- ArrayList brushArray = new ArrayList() ;
- ArrayList fontArray = new ArrayList() ;
- public Form1()
- {
- InitializeComponent();
- }
-
private
- {
- //確定畫布
- Graphics g = e.Graphics;
- //繪製區域
- Rectangle r = e.Bounds;
- Font fn = null;
- if (e.Index >= 0)
- {
- //設定字型、字串格式、對齊方式
-
fn = (Font)fontArray[e.Index];
- string s = (string)comboBox1.Items[e.Index];
- StringFormat sf = new StringFormat();
- sf.Alignment = StringAlignment.Near;
- //根據不同的狀態用不同的顏色表示
- if (e.State == (DrawItemState.NoAccelerator | DrawItemState.NoFocusRect))
- {
- e.Graphics.FillRectangle(new SolidBrush(Color.Red), r);
- e.Graphics.DrawString(s, fn, new SolidBrush(Color.Black), r, sf);
- e.DrawFocusRectangle();
- }
- else
- {
- e.Graphics.FillRectangle(new SolidBrush(Color.LightBlue), r);
- e.Graphics.DrawString(s, fn, new SolidBrush(Color.Red), r, sf);
- e.DrawFocusRectangle();
- }
- }
- }
- privatevoid Form1_Load(object sender, EventArgs e)
- {
- fontArray.Add(new Font("Ariel", 8, FontStyle.Bold));
- fontArray.Add(new Font("Courier", 8, FontStyle.Italic));
- fontArray.Add(new Font("Veranda", 8, FontStyle.Bold));
- fontArray.Add(new Font("System", 8, FontStyle.Strikeout));
- fontArray.Add(new Font("Century SchoolBook", 8, FontStyle.Underline));
- fontArray.Add(new Font("Helevctia", 8, FontStyle.Italic));
- //建立畫刷
- brushArray.Add(new SolidBrush(Color.Red));
- brushArray.Add(new SolidBrush(Color.Blue));
- brushArray.Add(new SolidBrush(Color.Green));
- brushArray.Add(new SolidBrush(Color.Yellow));
- brushArray.Add(new SolidBrush(Color.Black));
- brushArray.Add(new SolidBrush(Color.Azure));
- brushArray.Add(new SolidBrush(Color.Firebrick));
- brushArray.Add(new SolidBrush(Color.DarkMagenta));
- brushArray.Add(new SolidBrush(Color.DarkTurquoise));
- brushArray.Add(new SolidBrush(Color.Khaki));
- //畫comboBox1,注意它要呼叫comboBox1_DrawItem來畫
- comboBox1.Items.Add("中國");
- comboBox1.Items.Add("巴西");
- comboBox1.Items.Add("哥斯大黎加");
- comboBox1.Items.Add("土耳其");
- comboBox1.Items.Add("韓國");
- comboBox1.Items.Add("日本");
- //畫comboBox2,注意它要呼叫comboBox2_DrawItem來畫
- comboBox2.Items.Add("");
- comboBox2.Items.Add("");
- comboBox2.Items.Add("");
- comboBox2.Items.Add("");
- comboBox2.Items.Add("");
- comboBox2.Items.Add("");
- comboBox2.Items.Add("");
- comboBox2.Items.Add("");
- comboBox2.Items.Add("");
- comboBox2.Items.Add("");
- //畫comboBox3,注意它要呼叫comboBox3_DrawItem來畫
- comboBox3.Items.Add("趙微");
- comboBox3.Items.Add("舒淇");
- comboBox3.Items.Add("諶豹");
- comboBox3.Items.Add("鄭巧玲");
- }
- privatevoid comboBox2_DrawItem(object sender, DrawItemEventArgs e)
- {
- Graphics g = e.Graphics;
- Rectangle r = e.Bounds;
- if (e.Index >= 0)
- {
- //設定字串前矩形塊rd的大小
- Rectangle rd = r;
- rd.Width = rd.Left + 20;
- Rectangle rt = r;
- r.X = rd.Right;
- //用不同的顏色畫矩形塊
- SolidBrush b = (SolidBrush)brushArray[e.Index];
- g.FillRectangle(b, rd);
- //設定字串的格式
- StringFormat sf = new StringFormat();
- sf.Alignment = StringAlignment.Near;
- if (e.State == (DrawItemState.NoAccelerator | DrawItemState.NoFocusRect))
- {
- //字串背景
- e.Graphics.FillRectangle(new SolidBrush(Color.White), r);
- //顯示字串
- e.Graphics.DrawString(b.Color.Name, new Font("Ariel", 8, FontStyle.Bold), new SolidBrush(Color.Black), r, sf);
- //繪製取得焦點時的虛線框
- e.DrawFocusRectangle();
- }
- else
- {
- e.Graphics.FillRectangle(new SolidBrush(Color.LightBlue), r);
- e.Graphics.DrawString(b.Color.Name, new Font("Veranda", 8, FontStyle.Bold), new SolidBrush(Color.Red), r, sf);
- e.DrawFocusRectangle();
- }
- }
- }
- privatevoid comboBox3_DrawItem(object sender, DrawItemEventArgs e)
- {
- Graphics g = e.Graphics;
- Rectangle r = e.Bounds;
- Size imageSize = imageList1.ImageSize;
- Font fn = null;
- if (e.Index >= 0)
- {
- fn = (Font)fontArray[0];
- string s = (string)comboBox3.Items[e.Index];
- StringFormat sf = new StringFormat();
- sf.Alignment = StringAlignment.Near;
- if (e.State == (DrawItemState.NoAccelerator | DrawItemState.NoFocusRect))
- {
- //畫條目背景
- e.Graphics.FillRectangle(new SolidBrush(Color.Red), r);
- //繪製圖像
- imageList1.Draw(e.Graphics, r.Left, r.Top, e.Index);
- //顯示字串
- e.Graphics.DrawString(s, fn, new SolidBrush(Color.Black), r.Left + imageSize.Width, r.Top);
- //顯示取得焦點時的虛線框
- e.DrawFocusRectangle();
- }
- else
- {
- e.Graphics.FillRectangle(new