Android, you really should go the DataTable route.. you have put your things into hashtables so you can select them, but DataTable can be used like a hashtable can:
object myItem = myDatatable.FindByKey("primary key").Items("whatever column")
Plus, a DataTable, like Juggalo says, can be made the data source for the list. To know which item is selected by the user, you just call SelectedValue and you get the data row that is selected
If you really, really must persist with the route you have gone down, you should know that, the text shown in the list is whatever the .ToString() method of the object in the list collection returns.
So all your items in your collection, need to have an overridden ToString() method to return what you want showing in the list. Then all the items in the hash table .Values colelction need adding to the ListBox's .List colelction
Then, to make use of your item, you call SelectedValue, and that gets you the item itself. But then, I'm wondering what is the point of the hash table.. cause all you can do with it (if your object value also contaisn the key) is use your retrieved object to get the key to use in the hash table to retrieve.. oh, the same object again..
Which moots the need for the hashtable..
Consider scrapping the hashtable idea (theyre old anyway; you have 2.0, use Dictionary instead) entirely, have your data access layer return a datatable (not a dataset) which is a list-like, searchable container for data (oh.. like a hashtable? yes..) that can be bound to the list..
It will for sure make your life easier.. And if you think you have some other problem for which youre using HashTable, that the datatable cannot solve, then tell us, and we'll tell you how DataTable solves that problem (hopefully!

)