Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Merkwürdiges Verhalten einer Radiogroup (https://www.delphipraxis.net/167617-merkwuerdiges-verhalten-einer-radiogroup.html)

Delphi-Laie 9. Apr 2012 16:27

Merkwürdiges Verhalten einer Radiogroup
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo Delphi-Freunde!

Ich bin einem unerwarteten und merkwürdigen (fehlerhaften?) Verhalten der Radiogroups auf der Spur, das mir erstmalig an Delphi-4-Compilaten auffiel. Ich benutze hier ein Delphi-2-Compilat wegen der geringen Dateigröße zur Demonstration desselben.

Wird bei einer Radiogroup, deren Itemindex >-1 ist, deren Itemindex per formularfremder Ereignisbehandlungsroutine wieder einge"null"t, also auf -1 gesetzt, so springt - machmal (s.u.) - der Itemindex auf den Wert zurück, den er vor diesem "fremden Einnullen" hatte.

Und noch merkwürdiger: Das passiert nur beim erstmaligen Schließen des fremden Formulares, bei weitern bleibt der "leere Itemindex" hingegen auch nach dem Schließen erhalten.

Also, reproduzierbar ist dieses Verhalten wie folgt:

Nach dem Programmstart:

1. Formular 2 anzeigen
2. RadioGroup auf 0 oder 1 setzen
3. Radiogroup 2 über Formular 2 "einnullen"
4. Formular 2 schließen

Der Itemindex springt auf den Wert zuvor zurück, aber eben nur nach dem erstmaligen Schließen des Formulares 2.

Ist die Reihenfolge nach dem Programmstart jedoch:

1. RadioGroup auf 0 oder 1 setzen
2. Formular 2 anzeigen
3. Radiogroup 2 über Formular 2 "einnullen"
4. Formular 2 schließen

, dann funktioniert es wie erwartet, der Itemindex verhändert sich nach dem Schließen des Formulares 2 nicht.

Soll das so sein?

Vielen Dank im voraus und viele Grüße

Delphi-Laie

himitsu 9. Apr 2012 16:40

AW: Merkwürdiges Verhalten einer Radiogroup
 
Ist doch einfach, wenn man genau hinguckt, und nicht im Geringsten ein Fehlverhalten.

War der Eingabefokus in der GroupBox und er kommt nach dem Schließen der zweiten Form wieder in die GroupBox zurück,
dann aktiviert dieser Eingabefokus den aktiven RadioButton.

Das ist also ein vollkommen korrektes Standardverhalten dieser Komponente. :angle:

Delphi-Laie 9. Apr 2012 16:43

AW: Merkwürdiges Verhalten einer Radiogroup
 
Ach so, Eingabefokus heißt das Zauberwort (ich weiß durchaus, was das ist, doch daß dieser hier aktiv wird, war mir nicht gegenwärtig). Das dürfte mir weiterhelfen. Vielen Dank!

stahli 9. Apr 2012 21:58

AW: Merkwürdiges Verhalten einer Radiogroup
 
"Vollkommen korrekt" würde ich nicht sagen: http://www.delphipraxis.net/85385-tr...kt-falsch.html

himitsu 9. Apr 2012 22:15

AW: Merkwürdiges Verhalten einer Radiogroup
 
Die RadioGroup reagiert eben auf das Selektieren.

Und da es kein OnSelectionChange gibt, wird diese Änderung eben über das OnClick behandelt.
Solange ich mich erinnern kann, ist das schon so.

Außerdem ist bei Radioboxen standardmäßig immer ein Eintrag ausgewählt.


Will man ein Anderes Verhalten, dann währen TCheckBoxen die bessere alternative, anstatt ein Standardverhalten zu ändern.
Beim Checken einer CheckBox kann man Andere ja disablen oder unchecken.

Delphi-Laie 10. Apr 2012 21:41

AW: Merkwürdiges Verhalten einer Radiogroup
 
Zitat:

Zitat von himitsu (Beitrag 1160880)
Die RadioGroup reagiert eben auf das Selektieren.

Und da es kein OnSelectionChange gibt, wird diese Änderung eben über das OnClick behandelt.
Solange ich mich erinnern kann, ist das schon so.

Sinnvoll finde ich dieses Verhalten auch nicht, da gebe stahli recht. Es lag ja definitiv keine Nutzereingabe ("erkennbarer Wille") vor, die Radiogroup angeklickt zu haben. Mit dem Verändern des Fokus (diesen auf das Formular umgeleitet) ließ sich dieses elende Verhalten allerdings beseitigen.

Zitat:

Zitat von himitsu (Beitrag 1160880)
Außerdem ist bei Radioboxen standardmäßig immer ein Eintrag ausgewählt.

Und damit ist ein OnClick nur über einen anderes aktivierten Eintrag möglich. Zweimal hintereinander beim gleichen Eintrag ist nicht möglich. Dazu eben benötigte ich das Ein"nullen" der Radiobox.

Zitat:

Zitat von himitsu (Beitrag 1160880)
Will man ein Anderes Verhalten, dann währen TCheckBoxen die bessere alternative, anstatt ein Standardverhalten zu ändern.
Beim Checken einer CheckBox kann man Andere ja disablen oder unchecken.

Mit viel zusätzlichem "Rumgemachche" (zusätzlicher Code mit entsprechendem Fehlerpotential) ist das natürlich möglich. Letztlich kann man sich aus vielen CheckBoxen auch eine Art RadioGroup basteln. Doch auch dort muß, wenn man zweimal hintereinander den gleichen Eintrag auswählen möchte, zwischenzeitlich wieder eingenullt werden (was wiederum erfordert, das auftretende OnClick abzufangen). Natürlich läßt sich alles über einen einzigen zusätzlichen Button regeln, doch der erfordert zusätzlichen Platz auf dem Formular, eine zusätzliche Eingabe (OnClick) und letztlich auch zusätzlichen Code.


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:47 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz