Ich hatte ein ähnliches Problem vor kurzem auch, mit .NET 2.0 zwar, aber soviel sollte da nicht anders sein. Und zwar kannst du in einer Listbox nicht nur Strings, sondern beliebige Objekte speichern
Entweder machst du dir also dafür ne Klasse, deren ToString-Methode genau die Anzeige liefert, die du willst, oder du speicherst direkt deine Fenster da drin und zeichnest die Listbox-Items per Ownerdraw.
Bei den "größeren" Listenelementen, also ListView und TreeView, bieten die jeweiligen Itemklassen ein Data- bzw. Tag-Member an, in dem man sowas speichern kann.