Thomas Woelfers Baustatik Blog

Baustatik-Software und was sonst des Weges kommt

Die TreeView und die Bitmaps

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.

Comments (1) -

  • Martin Mueller

    8/22/2004 7:53:28 PM |

    Das hat mal wieder historische Gründe.  Meines Wissens wurde die Tree-Control erstmals beim Windows Explorer in Windows 95 verwendet.  Dabei wird links eine Tree-Control mit der Hierarchie der Volumes und Directories angezeigt, und rechts davon als ListView der Inhalt des links ausgewählten Directory.  Das ausgewählte Directory wird dabei mit einem Icon dargestellt, welches einen aufgeklappten Ordner zeigt.  Man muss in diesem Fall also nicht auch noch erst den Knoten im Tree aufklappen, um seinen Inhalt zu sehen.  Dies wird erst nötig, wenn man die Subdirectories des aktuellen Directory untersuchen will.  Unterschiedliche Icons für die Zustände "aufgeklappt" und "zugeklappt" sind dagegen eigentlich unnötig, weil das ja schon durch das "[+]" bzw. "[-]" vor dem Icon angezeigt wird.

Comments are closed