Click here to Skip to main content
15,867,488 members
Articles / Programming Languages / C#
Article

ListBox with Icons

Rate me:
Please Sign up or sign in to vote.
2.34/5 (46 votes)
8 Apr 2002 317.9K   48   37
Listbox Control with an image property for every item

Introduction

All of us like more color or image in our control, so do I.

In this article, I give each item in the custom ListBox class an image property.

Note: my article has no source code because it very short and easy.

First: we create 2 classes for GListBox

C#
// 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 use our code, we could do:

C#
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 and thanks for reading.

License

This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here


Written By
Web Developer
Vietnam Vietnam
Nguyen Ha Giang,BS(computer science).

Comments and Discussions

 
QuestionHow to change the size of the images in the listbox Pin
sly_Chandan29-Dec-20 21:14
sly_Chandan29-Dec-20 21:14 
GeneralMy vote of 3 Pin
Marco Bertschi18-Feb-13 21:26
protectorMarco Bertschi18-Feb-13 21:26 
GeneralMy vote of 1 Pin
surabimadu9-Oct-12 14:09
surabimadu9-Oct-12 14:09 
QuestionVB.NET Code please Pin
tharinda_8520-Oct-11 8:57
tharinda_8520-Oct-11 8:57 
GeneralMy vote of 1 Pin
shabeerhameed4-Aug-11 4:07
shabeerhameed4-Aug-11 4:07 
GeneralMy vote of 1 Pin
TheIdleProgrammer11-Feb-10 4:48
TheIdleProgrammer11-Feb-10 4:48 
GeneralMy vote of 2 Pin
Thomas Fredriksen2-Feb-10 6:16
Thomas Fredriksen2-Feb-10 6:16 
GeneralFixed some bugs, added HorizonalScrollbar and color functionality Pin
Murat Karahan24-Jan-10 4:29
Murat Karahan24-Jan-10 4:29 
GeneralMy vote of 1 Pin
Piyush Vardhan Singh23-Jul-09 20:15
Piyush Vardhan Singh23-Jul-09 20:15 
GeneralMy problem Pin
drnox12-Jul-08 17:37
drnox12-Jul-08 17:37 
GeneralCode Fixes Pin
dean.wilde27-Jun-08 13:02
dean.wilde27-Jun-08 13:02 
GeneralCode wrong Pin
binit_rana23-Oct-07 7:32
binit_rana23-Oct-07 7:32 
GeneralRemoving an item from GListBox Pin
Brustem16-Oct-07 10:05
Brustem16-Oct-07 10:05 
GeneralRe: Removing an item from GListBox Pin
Pawel Gielmuda12-Nov-07 22:41
Pawel Gielmuda12-Nov-07 22:41 
GeneralHorizontal ScrollBar Pin
laqula7-Mar-07 2:37
laqula7-Mar-07 2:37 
GeneralClass in VB.NET... frist part Pin
dvdmena17-Jan-07 5:05
dvdmena17-Jan-07 5:05 
Generalto add item to listBox Pin
teklay2-Dec-06 2:03
teklay2-Dec-06 2:03 
GeneralTidied OnDrawItem Pin
satankidneypie3-May-06 4:35
satankidneypie3-May-06 4:35 
GeneralRe: Tidied OnDrawItem Pin
iammudman19-Dec-06 9:16
iammudman19-Dec-06 9:16 
GeneralRe: Tidied OnDrawItem Pin
MarkusD20-Feb-07 22:03
MarkusD20-Feb-07 22:03 
GeneralRe: Tidied OnDrawItem Pin
SystemExam25-Jul-09 8:24
SystemExam25-Jul-09 8:24 
Questionwhy no full code? Pin
Darchangel24-Sep-05 16:30
Darchangel24-Sep-05 16:30 
GeneralFine Pin
baskar.G20-Jul-05 20:43
baskar.G20-Jul-05 20:43 
Generalusable version Pin
culithay12-Dec-04 20:23
culithay12-Dec-04 20:23 
QuestionWhat the heck is going on Pin
Apollo4x4-Mar-04 14:46
Apollo4x4-Mar-04 14:46 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.