[导入]带图标的下拉框
using
System;
using System.Drawing;
namespace System.Windows.Forms
{
/// <summary>
/// 带图标的下拉框
/// 修改者:周鼎汉
/// 修改时间:2007.06.08
///
修改部分:修改了ImageComboItem中的构造方法
///
添加了显示的缩进层次属性,在代码
///
修改了画图片和文字的位置。
/// </summary>
public class ImageCombo : ComboBox
{
private ImageList imgs = new
ImageList();
public ImageCombo()
{
//
设置DrawMode为用户自己控制的方式
this.DrawMode
= DrawMode.OwnerDrawFixed;
}
// ImageList属性
public ImageList
ImageList
{
get{return
imgs;}
set{imgs =
value;}
}
//
自定义画ComboBox
protected override void
OnDrawItem(DrawItemEventArgs e)
{
//
画背景和焦点区域
e.DrawBackground();
e.DrawFocusRectangle();
//
首先检查是否是一个Item
if (e.Index
< 0)
{
//
如果不是直接画文本
e.Graphics.DrawString(this.Text,
e.Font, new SolidBrush(e.ForeColor), e.Bounds.Left +
imgs.ImageSize.Width, e.Bounds.Top);
}
else
{
//
是否是ImageComboBox
if
(this.Items[e.Index].GetType() == typeof(ImageComboItem))
{
//得到要画的项目
ImageComboItem
item = (ImageComboItem) this.Items[e.Index];
//得到前景色和字体
Color
forecolor = (item.ForeColor !=
Color.FromKnownColor(KnownColor.Transparent)) ? item.ForeColor :
e.ForeColor;
Font
font = item.Mark ? new Font(e.Font, FontStyle.Bold) : e.Font;
//
-1代表没有图片
if
(item.ImageIndex != -1)
{
//
画图片,画文本
this.ImageList.Draw(e.Graphics,
e.Bounds.Left+item.Level*imgs.ImageSize.Width, e.Bounds.Top,
item.ImageIndex);
e.Graphics.DrawString(item.Text,
font, new SolidBrush(forecolor), e.Bounds.Left +
imgs.ImageSize.Width+item.Level*imgs.ImageSize.Width,
e.Bounds.Top);
}
else
{
//
没有图片直接画文本
e.Graphics.DrawString(item.Text,
font, new SolidBrush(forecolor), e.Bounds.Left +
imgs.ImageSize.Width+item.Level*imgs.ImageSize.Width,
e.Bounds.Top);
}
}
else
{
//
如果不是ImageComboBox,那么直接画文本
e.Graphics.DrawString(this.Items[e.Index].ToString(),
e.Font, new SolidBrush(e.ForeColor), e.Bounds.Left +
imgs.ImageSize.Width, e.Bounds.Top);
}
}
base.OnDrawItem
(e);
}
}
/// <summary>
/// 下拉框中的项目
/// </summary>
public class ImageComboItem
{
//前景色继承自系统颜色
private Color forecolor =
Color.FromKnownColor(KnownColor.Transparent);
private bool mark =
false;
private int imageindex =
-1;
private int level=0;
private object tag =
null;
private string text =
null;
public ImageComboItem()
{
}
public ImageComboItem(string
Text) :this(Text,-1)
{
}
public ImageComboItem(string
Text,int ImageIndex) :this(Text,ImageIndex,0)
{
}
public ImageComboItem(string
Text, int ImageIndex,int
Level):this(Text,ImageIndex,Level,false)
{
}
public ImageComboItem(string
Text, int ImageIndex, int Level,bool
Mark):this(Text,ImageIndex,Level,Mark,Color.FromKnownColor(KnownColor.Transparent))
{
}
public ImageComboItem(string
Text, int ImageIndex, int Level,bool Mark, Color
ForeColor):this(Text,ImageIndex,Level,Mark,ForeColor,null)
{
}
public ImageComboItem(string
Text, int ImageIndex,int Level, bool Mark, Color ForeColor, object
Tag)
{
text =
Text;
imageindex =
ImageIndex;
this.level=Level;
mark =
Mark;
forecolor =
ForeColor;
tag =
Tag;
}
// 前景色
public Color ForeColor
{
get{return
forecolor;}
set{forecolor
= value;}
}
//
图片索引
public int ImageIndex
{
get{return
imageindex;}
set{imageindex
= value;}
}
//项目的缩进层次
public int Level
{
get{return
this.level;}
set{this.level=value;}
}
// 是否加粗
public bool Mark
{
get{return
mark;}
set{mark =
value;}
}
//
Tag属性
public object Tag
{
get{return
tag;}
set{tag =
value;}
}
//
项目文本
public string Text
{
get{return
text;}
set{text =
value;}
}
// ToString()
返回项目文本
public override string
ToString()
{
return
text;
}
}
}
文章来源:http://blog.sina.com.cn/s/blog_49458c27010008ir.html