分享

为ComboBox控件添加图片

 家住天地 2010-09-13
作者:孟宪会 发表于:2003-07-02 17:34:04

.NET自带的ComboBox控件没有添加图片的功能,我们可以自己进行扩展,下面就是扩展类的代码:

结果如下:

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, new SolidBrush(ea.ForeColor), bounds.Left+imageSize.Width, bounds.Top); } else { ea.Graphics.DrawString(item.Text, ea.Font, new SolidBrush(ea.ForeColor), bounds.Left, bounds.Top); } } catch { if (ea.Index != -1) { ea.Graphics.DrawString(Items[ea.Index].ToString(), ea.Font, new SolidBrush(ea.ForeColor), bounds.Left, bounds.Top); } else { ea.Graphics.DrawString(Text, ea.Font, new SolidBrush(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> /// Summary description for Form1. /// </summary> 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 // } /// <summary> /// Clean up any resources being used. /// </summary> protected override void Dispose( bool disposing ) { if( disposing ) { if (components != null) { components.Dispose(); } } base.Dispose( disposing ); } #region Windows Form Designer generated code /// <summary> /// Required method for Designer support - do not modify /// the contents of this method with the code editor. /// </summary> 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("【孟宪会之精彩世界】", 0)); comboBox1.Items.Add(new ComboBoxExItem("【孟宪会之精彩世界】", 1)); comboBox1.Items.Add(new ComboBoxExItem("【孟宪会之精彩世界】", 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 /// <summary> /// The main entry point for the application. /// </summary> [STAThread] static void Main() { Application.Run(new Form1()); } } }

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多