.NET自帶的ComboBox控件沒(méi)有添加圖片的功能,我們可以自己進(jìn)行擴展,下面就是擴展類(lèi)的代碼:
結果如下:
ComboBoxEx.cs
using System;using System.Windows.Forms;using System.Windows.Forms.Design;using System.Drawing;namespace Mengxianhui.ComboBoxEx{class ComboBoxEx : ComboBox{private ImageList imageList;public ImageList ImageList{get {return imageList;}set {imageList = value;}}public ComboBoxEx(){DrawMode = DrawMode.OwnerDrawFixed;}protected override void OnDrawItem(DrawItemEventArgs ea){ea.DrawBackground();ea.DrawFocusRectangle();ComboBoxExItem item;Size imageSize = imageList.ImageSize;Rectangle bounds = ea.Bounds;try{item = (ComboBoxExItem)Items[ea.Index];if (item.ImageIndex != -1){imageList.Draw(ea.Graphics, bounds.Left, bounds.Top,item.ImageIndex);ea.Graphics.DrawString(item.Text, ea.Font, newSolidBrush(ea.ForeColor), bounds.Left+imageSize.Width, bounds.Top);}else{ea.Graphics.DrawString(item.Text, ea.Font, newSolidBrush(ea.ForeColor), bounds.Left, bounds.Top);}}catch{if (ea.Index != -1){ea.Graphics.DrawString(Items[ea.Index].ToString(), ea.Font, newSolidBrush(ea.ForeColor), bounds.Left, bounds.Top);}else{ea.Graphics.DrawString(Text, ea.Font, newSolidBrush(ea.ForeColor), bounds.Left, bounds.Top);}}base.OnDrawItem(ea);}}class ComboBoxExItem{private string _text;public string Text{get {return _text;}set {_text = value;}}private int _imageIndex;public int ImageIndex{get {return _imageIndex;}set {_imageIndex = value;}}public ComboBoxExItem(): this(""){}public ComboBoxExItem(string text): this(text, -1){}public ComboBoxExItem(string text, int imageIndex){_text = text;_imageIndex = imageIndex;}public override string ToString(){return _text;}}}使用方法
using System;using System.Drawing;using System.Collections;using System.ComponentModel;using System.Windows.Forms;using System.Data;namespace Mengxianhui.ComboBoxEx{/// /// Summary description for Form1./// public class Form1 : System.Windows.Forms.Form{private ComboBoxEx comboBox1;private System.ComponentModel.IContainer components;public Form1(){//// Required for Windows Form Designer support//InitializeComponent();//// TODO: Add any constructor code after InitializeComponent call//}/// /// Clean up any resources being used./// protected override void Dispose( bool disposing ){if( disposing ){if (components != null){components.Dispose();}}base.Dispose( disposing );}#region Windows Form Designer generated code/// /// Required method for Designer support - do not modify/// the contents of this method with the code editor./// private void InitializeComponent(){ComboBoxEx comboBox1 = new ComboBoxEx();ImageList imageList1 = new ImageList();imageList1.Images.Add(Image.FromFile(@"D:\favicon.ico"));imageList1.Images.Add(Image.FromFile(@"D:\favicon4.ico"));imageList1.Images.Add(Image.FromFile(@"D:\favicon5.ico"));comboBox1.ImageList = imageList1;comboBox1.Width = 200;comboBox1.Items.Add(new ComboBoxExItem("【孟憲會(huì )之精彩世界】", 0));comboBox1.Items.Add(new ComboBoxExItem("【孟憲會(huì )之精彩世界】", 1));comboBox1.Items.Add(new ComboBoxExItem("【孟憲會(huì )之精彩世界】", 2));this.Controls.AddRange(new System.Windows.Forms.Control[] {comboBox1});//// Form1//this.AutoScaleBaseSize = new System.Drawing.Size(6, 14);this.ClientSize = new System.Drawing.Size(292, 273);this.Controls.AddRange(new System.Windows.Forms.Control[] {comboBox1});this.Name = "Form1";this.Text = "Form1";this.ResumeLayout(false);}#endregion/// /// The main entry point for the application./// [STAThread]static void Main(){Application.Run(new Form1());}}}