OrdListBox is a class derived from
was written by me when I was working on a project where I had this requirement
of having ordered items in a list box. The issue was that there might be
multiple copies of the same item in the list box and I had no way to
differentiate among these duplicate items. The duplicate items would obviously
be textual abstractions of distinct underlying objects. MFC had
CListBox::SetItemData which allowed us to associate a 32 bit value with
an item in the list box. I assumed rather enthusiastically that there would be
something analogous to that in the .NET
ListBox class. It
was with an intense annoyance that I realized that I couldn't find anything to
do the job. Of course for all I know there might be some hidden feature
somewhere which I had overlooked and missed. But anyway I had to write my own
class to achieve what I wanted to. I was a little stuck when Shog9 brilliantly
helped me out with a beautiful but simple suggestion that I totally missed out
The class basically allows you to associate strings with each list box item.
Now when you add an item to the string using the new method added to the derived
class, this order string will be used to determine the position where this new
item would be inserted at. The order string can be either numeric or
non-numeric. If the order string is numeric then 6 comes before 12, but if the
order string is non-numeric you must watch out, because 6 is now greater than 12
on account of it's position in the character set.
OrdListBox listBox1 = new OrdListBox(true);
Initializes a new instance of the
public OrdListBox( bool bNum );
bNum - Set this to
true to make
the ordering numeric and to
false to make the ordering
This will add a new ordered item to the ordered list box, and it will
insert the new item at the correct position within the list box, that will
maintain the order of the items in the list box, after the new item has been
added to it.
public void AddOrderedItem(string ItemText, string ItemOrder);
ItemText - This is the text of the item to be added to the
ordered list box.
ItemOrder - This is the order string that will specify the
order value of the item to be added.
This method will return the order value of an item in a list box given the
index of the item within the list box.
public string GetItemOrder(int index)
index - This is the index of the required item within the
The method will return a string that represents the order value of the
specified list box item.
public class OrdListBox : System.Windows.Forms.ListBox
public OrdListBox(bool bNum)
bNumeric = bNum;
Sorted = false; }
public void AddOrderedItem(string ItemText, string ItemOrder)
ItemData data = new ItemData(ItemText,ItemOrder);
int c = Items.Count;
for (int i = 0; i < Items.Count; i++)
if( c == Items.Count)
public string GetItemOrder(int index)
if(index < 0 || index >= Items.Count)
private bool bNumeric = false;
public ItemData(string str1, string str2)
private string m_ItemText;
private string m_ItemOrder;
public override string ToString()
public bool IsLess(ItemData d, bool bNum)
int i1 = Convert.ToInt32(m_ItemOrder);
int i2 = Convert.ToInt32(d.m_ItemOrder);
return ( i1 < i2 );
return ( m_ItemOrder.CompareTo(d.m_ItemOrder) < 0 );
public string ItemOrder
Nish is a real nice guy who has been writing code since 1990 when he first got his hands on an 8088 with 640 KB RAM. Originally from sunny Trivandrum in India, he has been living in various places over the past few years and often thinks it’s time he settled down somewhere.
Nish has been a Microsoft Visual C++ MVP since October, 2002 - awfully nice of Microsoft, he thinks. He maintains an MVP tips and tricks web site - www.voidnish.com
where you can find a consolidated list of his articles, writings and ideas on VC++, MFC, .NET and C++/CLI. Oh, and you might want to check out his blog on C++/CLI, MFC, .NET and a lot of other stuff - blog.voidnish.com
Nish loves reading Science Fiction, P G Wodehouse and Agatha Christie, and also fancies himself to be a decent writer of sorts. He has authored a romantic comedy Summer Love and Some more Cricket
as well as a programming book – Extending MFC applications with the .NET Framework
Nish's latest book C++/CLI in Action
published by Manning Publications is now available for purchase. You can read more about the book on his blog.
Despite his wife's attempts to get him into cooking, his best effort so far has been a badly done omelette. Some day, he hopes to be a good cook, and to cook a tasty dinner for his wife.