I'm sorry that you feel that this is a screwy limitation and half-backed object. I think it is quite the opposite. The way the win forms controls are set up is far more flexible than the ASP.NET counterparts. Of course, this comes with an added complexity.
You might take a look at the docs for the DisplayMember property of the listbox:
http://msdn.microsoft.com/en-us/library/system.windows.forms.listcontrol.displaymember(VS. 71).aspx
I think you will find what you need in there. By default, the listbox control will call the ToString() method of each list member and show the result in the listbox. You can create another property to emit exactly what you like for the display output. Also, you can specify a particular property for the value of the item. This should give you all the flexibility you need to reach your goals.
As far as the simple object you are looking for, you might try the DictionaryEntry class:
http://msdn.microsoft.com/en-us/library/system.collections.dictionaryentry_members(VS.71). aspx
That is basically just a key/value pair. The key and value properties are of System.Object type so you'll still need to cast them when you want to consume them. Later versions of .NET have added some typed and generic versions to provide strong typing of the entry.
-Peter
compiledthoughts.com