位置:海鸟网 > IT > ASP.NET >

好久没有给大家东西了.看见了这个.感觉不错.ListBox with icon

Introduction
Hello all,
All of us like more color or image in our control, so am i.
This article, I give custom ListBox class that has image property for each item.
Note: my article has no source code because it very short and easy.
The first: we create 2 class for GListBox
...
// GListBoxItem class
public class GListBoxItem
{
        private string _myText;
        private int _myImageIndex;
        // properties
        public string Text
        {
            get {return _myText;}
            set {_myText = value;}
        }
        public int ImageIndex
        {
            get {return _myImageIndex;}
            set {_myImageIndex = value;}
        }
        //constructor
        public GListBoxItem(string text, int index)
        {
            _myText = text;
            _myImageIndex = index;
        }
        public GListBoxItem(string text): this(text,-1){}
        public GListBoxItem(): this(""){}
        public override string ToString()
        {
            return _myText;
        }
    }//End of GListBoxItem class


    // GListBox class
    public class GListBox : ListBox
    {
        private ImageList _myImageList;
        public ImageList ImageList
        {
            get {return _myImageList;}
            set {_myImageList = value;}
        }
        public GListBox()
        {
            // Set owner draw mode
            this.DrawMode = DrawMode.OwnerDrawFixed;
        }
        protected override void OnDrawItem(System.Windows.Forms.DrawItemEventArgs e)
        {
            e.DrawBackground();
            e.DrawFocusRectangle();
            GListBoxItem item;
            Rectangle bounds = e.Bounds;
            Size imageSize = _myImageList.ImageSize;
            try
            {
                item = (GListBoxItem) Items[e.Index];
                if (item.ImageIndex != -1)
                {
                    imageList.Draw(e.Graphics, bounds.Left,bounds.Top,item.ImageIndex);
                    e.Graphics.DrawString(item.Text, e.Font, new SolidBrush(e.ForeColor),
                                bounds.Left+imageSize.Width, bounds.Top);
                }
                else
                {
                    e.Graphics.DrawString(item.Text, e.Font,new SolidBrush(e.ForeColor), bounds.Left,
                            bounds.Top);
                }
            }
            catch
            {
                if (e.Index != -1)
                {
                    e.Graphics.DrawString(Items[e.Index].ToString(),e.Font,
                            new SolidBrush(e.ForeColor) ,bounds.Left, bounds.Top);
                }
                else
                {
                    e.Graphics.DrawString(Text,e.Font,new SolidBrush(e.ForeColor),bounds.Left,
                                bounds.Top);
                }
            }
            base.OnDrawItem(e);
        }
}//End of GListBox class

After that, in order to our code, we could use :
...
GListBox lb = new GListBox();
lb.ImageList = imageList;
lb.Items.Add( new GListBoxItem("Image 1",0));
lb.Items.Add( new GListBoxItem("Image 2",1));
lb.Items.Add( new GListBoxItem("Image 3",2));
....
That's all
Thanks for reading.
Nguyen Ha Giang
mailto: giang@citd.edu.vn