[导入]带图标的下拉框
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
 
                    
                 
 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号