Takhle to tuším funguje v ASP.NET, tam jsou prvky ListBoxu skutečně vždy a jen instance třídy ListItem. Ale v klasické WinForms komponentě může Listbox hostovat libovolný objekt, je to mimo jiné kvůli Object Bindingu přes BindingAdapter, což je celkem hezká věcička. SelectedItem by pak měl být ten objekt. ListBox pak zobrazí vlastnost objektu, kterou má definovanou ve vlastnosti DisplayMember a jako SelectedValue vrací vlastnost, kterou má nastavenou ve vlastnosti ValueMember. Pokud tyto vlastnosti nastavené nejsou, v ListBoxu se zobrazí výsledek volání ToString na daný objekt. Při způsobu plnění dle zdrojáku jsou uvnitř skladované objekty typu String, tím pádem to hledání v kolekci by mělo být správné. Chybu bych hledal v tom, že aktuálně vybraný prvek v kolekci není (možná se to IndexOf v programu volá ještě před tím, než je kolekce naplněná). Doporučuji program odkrokovat a před voláním IndexOf se podívat, co je v té kolekci a co v ní hledáte. To je asi nejjednodušší cesta, jak to zjistit.
|