Entwickler-Ecke
Grafische Benutzeroberflächen (VCL & FireMonkey) - 3 Checkboxen sollen aufeinander reagieren --> Stack-Überlauf
Terra23 - Do 06.10.11 19:42
Titel: 3 Checkboxen sollen aufeinander reagieren --> Stack-Überlauf
Hi Leute!
Ich habe 3 Checkboxen, die aufeinander reagieren sollen. Ich weiß, dass es mit einer RadioGroup viel einfacher zu lösen wäre, aber die wird von AlphaLite nicht geskinnt, aber AlphaLite bringt eigene Checkboxen mit.
Kann mir jemand helfen? Ich habe 3 Boxen. Wenn die eine angeklickt wird, dann soll sie den Haken bekommen und die anderen beiden sollen ihren Haken verlieren. Eigentlich ganz simpel ... das dachte ich zumindest, als ich diesen Code schrieb.
Mein Code sieht so aus:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20:
| procedure TForm1.ChckboxMainClick(Sender: TObject); begin ChckboxMain.State := cbChecked; ChckboxSide.State := cbUnchecked; ChckboxFusion.State := cbUnchecked; end;
procedure TForm1.ChckboxSideClick(Sender: TObject); begin ChckboxMain.State := cbUnchecked; ChckboxSide.State := cbChecked; ChckboxFusion.State := cbUnchecked; end;
procedure TForm1.ChckboxFusionClick(Sender: TObject); begin ChckboxMain.State := cbUnchecked; ChckboxSide.State := cbUnchecked; ChckboxFusion.State := cbChecked; end; |
Ich habe es auch vorher schon anders probiert, also nicht den State abgefragt sondern nach der Eigenschaft "Checked" gefragt. Es hat das gleiche Ergebnis gebracht, nur dass der Stack-Überlauf nicht gleich sofort kam... ;)
Gruß,
Terra
PS: Wenn mir noch jemand kurz erklären kann, was ein Stack-Überlauf ist, dann wäre ich noch zufriedener... ;)
Marc. - Do 06.10.11 19:53
Ich habe kein Delphi da, rate also einfach mal ins Blaue: Kann es sein, dass das Setzen von Checked ein OnClick-Ereignis auslöst? Damit würden sich die Ereignisse unbestimmt lange gegenseitig aufrufen, was möglichweise in einem StackOverflow enden könnte. ;)
Um es einmal grob zu formulieren: Ein Stack (FILO) ist eine Liste, beispielsweise ein Array, mit fester Länge. Sobald du mehr Daten dort ablegst (zwischenspeicherst) als reinpassen, gibt's einen Überlauf. :)
Horschdware - Do 06.10.11 20:21
@Marc: Genau so ist es. :zustimm:
@Terra:
ich würde Checkboxen für so ein Vorhaben ohnehin nicht nutzen. Für diese Funktionalität gibt es ja Radiobuttons.
Die Frage ist nun, ob dein dein AlphaLite normale Radiobuttons (statt RadioGroup) richtig skinnt.
BenBE - Do 06.10.11 22:20
Fasse alles dreis in eine Routine zusammen und bau das ganze so:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17:
| procedure TForm1.CBClick(Sender: TObject); var CB: TCheckbox; begin CB := TCheckbox(Sender); if not Assigned(CB) or (CB.Tag <> 0) then Exit;
CB.Tag := 1;
ChckboxMain.State := cbUnchecked; ChckboxSide.State := cbUnchecked; ChckboxFusion.State := cbUnchecked;
CB.State := cbChecked;
CB.Tag := 0; end; |
Horschdware - Fr 07.10.11 08:18
Mein ehemaliger Dozent für Softwareergonomie stirbt bei so etwas immer ein kleines Bisschen :wink:
jaenicke - Sa 08.10.11 07:42
Horschdware hat folgendes geschrieben : |
| Die Frage ist nun, ob dein dein AlphaLite normale Radiobuttons (statt RadioGroup) richtig skinnt. |
Nur die (kostenpflichtige) Vollversion, nicht die Lite Version.
Horschdware hat folgendes geschrieben : |
| Mein ehemaliger Dozent für Softwareergonomie stirbt bei so etwas immer ein kleines Bisschen :wink: |
Geiz ist halt geil...
Ein normales Design ohne Skins wäre sicher besser geeignet als die falschen Komponenten zu verwenden, die dem Benutzer nun einmal eine andere Funktionalität signalisieren... :roll:
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!