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

发表于:2007-06-30来源:作者:点击数: 标签:
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 fir
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

原文转自:http://www.ltesting.net