Die TreeView und die Bitmaps


Thomas Wölfer
Thomas Wölfer

22. August 2004


Die Windows.Forms TreeView hat eine ImageList - und in dieser ImageList kann man die Bitmaps unterbringen, die für die einzelnen Nodes im Tree verwendet werden. Leider zeigt sich hier auch bei .Net das etwas merkwürdige Erbe von Win32: Die TreeView - beziehungsweise deren Nodes - haben nämlich zwei Felder, mit denen Bitmaps gesetzt werden können. Das eine ist der ImageIndex, das andere der SelectedImageIndex.

Der ImageIndex enthält den Index des Bildes aus der ImageList, das verwendet werden soll, wenn sich die Node im 'Normalen' Zustand befindet. Der 'SelectedImageIndex' ist der Index des Bildes für den ausgewählten Zustand einer Node. Ich kenne zwar kein Programm das im Baum ein anderes Icon für ausgewählte Nodes verwendet als für Nodes im Normalzustand - aber sei's drum, ist ja schon wenn man die Möglichkeit hat.

Nun würde man erwarten das es außerdem auch einen Index für den 'aufgeklappten' Zustand einer Node gibt: Im Baum ist das schließlich deutlich wichtiger als der 'ausgewählte' Zustand - darum verwendet man schließlich einen Baum.

Unnötig zu sagen: Das gibts natürlich nicht. Wenn man so etwa 'ungewöhnliches' machen will wie einen Baum bei dem man andere Icons im aufgeklappten und geschlossenen Zustand verwendet, dann muss man das von Hand machen. :-(

Dazu implementiert man einen Handler für AfterExpand() und AfterCollapse() - und darin setzt man dann in Abhängigkeit von der Node die Image-Indizes. Dabei wirds dann noch nerviger: Man muß nämlich sowohl den 'ImageIndex' als auch den SelectedImageIndex setzen - auch wenn man sich für den 'SelectedImageIndex' eigentlich gar nicht interessiert.