Entwickler-Ecke

Grafische Benutzeroberflächen (VCL & FireMonkey) - TreeView: Anklicken löscht Icon


platzwart - Do 29.05.08 20:27
Titel: TreeView: Anklicken löscht Icon
Hallo,

ich nutze Delphi 2007 Pro.

Ich habe einem TreeView eine ImageList zugewiesen. Bei der Initialisierung des TreeView zur Laufzeit wird ein entsprechendes Icon zugewiesen, so weit funktioniert alles wunderbar. Wenn ich nun auf ein Element des TreeView klicke, wird das zuvor zugewiesene Icon durch das Icon mit dem Imageindex "0" ersetzt. Klicke ich nun ein anderes Element an, so wird das Icon des vormals gewählten Elements wieder korrekt angezeigt.

Wie kann ich verhindern, dass das Icon beim Anklicken ersetzt wird?

Thx


jaenicke - Do 29.05.08 20:36

Schau dir mal die Eigenschaften der Knoten an, du hast Image Index und Selected Index, Selected Index gibt das Bild an, das beim Anklicken angezeigt wird, standardmäßig steht da eine 0.


platzwart - Do 29.05.08 20:47


Delphi-Quelltext
1:
2:
3:
tv3_node:= TreeView3.Items.AddChild(nil, tmpNode.Text);
tv3_node.ImageIndex:= 4;
tv3_node.SelectedIndex:= -1;


immer noch das gleiche Problem... Icon ist beim Anklicken das Icon mit dem Index "0" in der ImageList.


jaenicke - Do 29.05.08 20:50

Es gibt ja auch kein Bild -1 in der ImageList. :roll:


platzwart - Do 29.05.08 20:56

OnClick:


Delphi-Quelltext
1:
TreeView3.Selected.SelectedIndex:= TreeView3.Selected.ImageIndex;                    


Bringt auch nix. Manchmal ist das Verhalten korrekt, manchmal nicht, absolut unvorhersagbar... Mal zeigt er nur Icon "0" an, mal das richtige, manchmal überlappt er beide...


jaenicke - Do 29.05.08 21:02

Also wenn ich beim Hinzufügen der Knoten beiden Werten den korrekten Wert zuordne, dann klappt das wunderbar, in OnClick wie du es zuletzt geschrieben hast, wird es ja dann erst nach und nach korrigiert, das ist ja nicht Sinn der Sache.

Du musst einfach nur ImageIndex und SelectedIndex den Index deines Bildes zuordnen, wenn du den Knoten erzeugst.


platzwart - Do 29.05.08 21:13

Wollte nur verhindern, dass ich bei jedem Ändern des ImageIndex auch immer den SelectedIndex mit ändern muss, dass ist verdammt nervig, doppelter Code.
Eine Option "SelectedIndex =ImageIndex" true/false würde viele Nerven schonen... So muss ich in einem Quelltext von mehreren tausend Zeilen immer dieses SelectedIndex mitschleppen...


Vielen Dank für die Hilfe!!!


jaenicke - Do 29.05.08 21:20

Es wäre viel einfacher, wenn du dir eine Methode schreibst, die den Knoten erzeugt und beides einträgt...


platzwart - Do 29.05.08 21:53

Nein, das Icon wird nicht dauerhaft zugewiesen, sondern während der Laufzeit mehrfach geändert.


jaenicke - Do 29.05.08 21:54

Auch das lässt sich ja in eine eigene Methode auslagern, so dass es beim Aufruf wieder ein Einzeiler ist ;-).


alzaimar - Do 29.05.08 22:42

wozu dient eigentlich der Event 'OnGetSelectedIndex'? :wink:


jaenicke - Do 29.05.08 23:59

Das wiederum kannte ich nicht, weil ich die Original TreeView nicht mehr benutze und nicht nachgeschaut habe. Aber es war eigentlich klar, dass es auch einfacher geht. :mrgreen: