Click here to Skip to main content
15,881,812 members
Articles / Multimedia / GDI+

Image ComboBox Control

Rate me:
Please Sign up or sign in to vote.
4.84/5 (40 votes)
7 Jul 2005CDDL4 min read 365.3K   17.5K   117  
This is an extended, owner drawn ComboBox which has an added support to display images in the combobox dropdown as well as the edit (text) box.
using System;
using System.Collections;
using System.ComponentModel.Design;
using System.Runtime.Serialization;
using System.ComponentModel;
using System.Windows.Forms ;

namespace ImageComboBox
{
	public sealed class ImageComboBoxItemCollection : IList, ICollection, IEnumerable
	{
		private ImageComboBox owner = null;

		public ImageComboBoxItemCollection(ImageComboBox owner)
		{
			this.owner = owner;
			
		}

		#region ICollection Members

		void ICollection.CopyTo(Array array, int index) 
		{
			for (IEnumerator e = this.GetEnumerator(); e.MoveNext();)
				array.SetValue(e.Current, index++);
		}
		
		bool ICollection.IsSynchronized 
		{
			get { return false; }
		}

		object ICollection.SyncRoot 
		{
			get { return this; }
		}

		#endregion

		#region IList Members

		object IList.this[int index] 
		{
			get { return this[index]; }
			set { this[index] = (ImageComboBoxItem)value; }
		}

		bool IList.Contains(object item)
		{
			throw new NotSupportedException();
		}

		int IList.Add(object item)
		{
			ImageComboBoxItem comboItem = (ImageComboBoxItem)item;
		
			return this.Add(comboItem);
		}

		bool IList.IsFixedSize 
		{
			get { return false; }
		}

		int IList.IndexOf(object item)
		{
			throw new NotSupportedException();
		}

		void IList.Insert(int index, object item)
		{
			ImageComboBoxItem comboItem = (ImageComboBoxItem)item;
			
			this.Insert(index, comboItem);
		}

		void IList.Remove(object item)
		{
			throw new NotSupportedException();
		}

		void IList.RemoveAt(int index)
		{
			this.RemoveAt(index);
		}

		#endregion

		#region ImageComboBox functions
		[Browsable(false)]
		public ImageComboBoxItem this[int index]
		{
			get{return (ImageComboBoxItem)owner.ComboBoxGetElement (index);}
			set{owner.ComboBoxSetElement (index,value);}
		}
		public int Count 
		{
			get { return owner.ComboBoxGetItemCount(); }
		}

		public bool IsReadOnly 
		{
			get { return false; }
		}
		
		public IEnumerator GetEnumerator() 
		{
			return owner.ComboBoxGetEnumerator(); 
		}

		public bool Contains(object item)
		{
			throw new NotSupportedException();
		}

		public int IndexOf(object item)
		{
			throw new NotSupportedException();
		}

		public void Remove(ImageComboBoxItem item)
		{
			throw new NotSupportedException();
		}

		public void Insert(int index, ImageComboBoxItem item)
		{
			owner.ComboBoxInsertItem(index, item);
		}

		public int Add(ImageComboBoxItem item)
		{
			return owner.ComboBoxInsertItem(this.Count, item);
		}

		public void AddRange(ImageComboBoxItem[] items)
		{
			for(IEnumerator e = items.GetEnumerator(); e.MoveNext();)
				owner.ComboBoxInsertItem(this.Count, (ImageComboBoxItem)e.Current);
		}

		public void Clear()
		{
			owner.ComboBoxClear();
		}

		public void RemoveAt(int index)
		{
			owner.ComboBoxRemoveItemAt(index);
		}

		#endregion
	}
		
}

By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.

If a file you wish to view isn't highlighted, and is a text file (not binary), please let us know and we'll add colourisation support for it.

License

This article, along with any associated source code and files, is licensed under The Common Development and Distribution License (CDDL)


Written By
United States United States
This member has not yet provided a Biography. Assume it's interesting and varied, and probably something to do with programming.

Comments and Discussions