Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi RadioButton seltsames Verhalten (https://www.delphipraxis.net/192512-radiobutton-seltsames-verhalten.html)

wendelin 25. Apr 2017 11:03

RadioButton seltsames Verhalten
 
Hallo,
ich habe zwei Units. In Form1 sind unter anderem RadioButton1 und Radiobutton2 vorhanden.
RadioButton1 ist auf
Delphi-Quellcode:
Checked := True
und Radiobutton2 auf
Delphi-Quellcode:
Checked := False
eingestellt.
In Form2 versuche ich nun mit
Delphi-Quellcode:
Form1.Radiobutton2.Checked := True
die Einstellungen von RB1 & RB2 zu ändern.
Solange Form2 nur verschoben wird (damit ich Form1 besser sehe) hat alles in meinem Sinn funktioniert!
Wenn ich aber Form2 schließe, ist die ursprüngliche Einstellung der RB's wieder da. Warum , oder was mache ich falsch?

Wendelin

Klaus01 25. Apr 2017 11:11

AW: RadioButton seltsames Verhalten
 
.. wann/wo werden denn die "Startwerte" der Radiobuttons in Form1 gesetzt?

Grüße
Klaus

himitsu 25. Apr 2017 11:18

AW: RadioButton seltsames Verhalten
 
zwei Form1? :stupid:

a.def 25. Apr 2017 12:11

AW: RadioButton seltsames Verhalten
 
Zitat:

Wenn ich aber Form2 schließe, ist die ursprüngliche Einstellung der RB's wieder da. Warum , oder was mache ich falsch?
Du setzt die Startwerte der Radiobuttons nicht zufällig im FormSHOW des Form1?

himitsu 25. Apr 2017 13:16

AW: RadioButton seltsames Verhalten
 
Zitat:

Zitat von a.def (Beitrag 1369007)
Du setzt die Startwerte der Radiobuttons nicht zufällig im FormSHOW des Form1?

Wenn, dann hätte da eher an OnActivate gedacht, als an OnShow, aber da macht doch niemand sowas rein. :angle:

a.def 25. Apr 2017 14:05

AW: RadioButton seltsames Verhalten
 
Zitat:

aber da macht doch niemand sowas rein
Der Themenersteller vielleicht. Deswegen fragte ich nach :P

wendelin 25. Apr 2017 19:10

AW: RadioButton seltsames Verhalten
 
Hallo Klaus01,
beide Radiobuttons(Properties)in Form1 sind direkt im Objektinspektor gesetzt worden.
Interessant ist der Umstand, daß in der selben Procedur (in Form2), aus der heraus die Radiobuttons(Properties) in Form1 geändert werden sollen
zwei weitere Buttons in Form1 angesprochen werden und die darunterliegenden Procs korrect ausgeführt werden, auch wenn am Ende der Proc
Form2 geschlossen bzw. Form2 mit
Delphi-Quellcode:
Form2.visible := False
nicht sichtbar ist.

Wendelin

a.def 25. Apr 2017 19:13

AW: RadioButton seltsames Verhalten
 
In welcher Form und in welcher Prozedur genau werden die RadioButtons denn gesetzt? Ist es ein Standardevent des Formulars?
Sicher, dass es nur eine Stelle gibt an denen die gesetzt werden?

Michael II 25. Apr 2017 20:15

AW: RadioButton seltsames Verhalten
 
Diese Diskussion tönt eher nach Quizsendung. A ist passiert und nun raten die LeserInnen eine Geschichte dazu ;-).

Könntest du nicht ein minimales Projekt erstellen mit diesen RadioButtons und dann checken, ob es immer noch passiert? Und wenn es geschieht: Welche Delphiversion/Buildnummer verwendest du? Poste deinen Code - oder lade dein Minimalprojekt rauf und es gibt sicher mindestens drei Leute, welche dein Projekt laden.

Hast du's mit Debuggen versucht? Du könntest doch einen Breakpoint setzen genau dort, wo der Wert "checked" gesetzt (BM_SETCHECK) wird. Ich nehme an, dass du dadurch dem Problem sehr rasch auf die Spur kommen wirst.

Nebenbei: Ich würde darauf verzichten, in einer "Formular A Unit" Komponenten eines anderen Formulars B aufzurufen. Ich weiss, das hat nix mit dem von dir geschilderten Problem zu tun.

wendelin 26. Apr 2017 11:00

AW: RadioButton seltsames Verhalten
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo Michael II,

ich habe ein kleines Testprogramm geschrieben, welches die Situation relativ gut wiedergibt. Allerdings klappt es jetzt auf Form2 - Listbox2 -
DoubleKlick überhaupt nicht. Ich habe daher noch auf Form2 den Speedbutton RB gesetzt (nur zum Test).Jetzt wird RB2 umgeschaltet auf TRUE.
Wenn ich aber Form2 schließe -> RB2 := FALSE.

Wendelin

a.def 26. Apr 2017 11:03

AW: RadioButton seltsames Verhalten
 
1. ich kompiliere die Exe-Datei
2. ich klicke auf U2
3. ich klicke in U2 auf RB
4. ich klicke in U2 auf CL

=> RadioButton2 bleibt bei mir Checked und RadioButton1 Unchecked.

Sehe da kein Problem. Ist also vielleicht ein Delphi 7-Problem. Unter Tokyo funktioniert es einwandfrei.

Was den DoubleClick in ListBox2 angeht:
die ListBox muss Einträge enthalten, damit DblClick ausgeführt wird.

HolgerX 26. Apr 2017 14:59

AW: RadioButton seltsames Verhalten
 
Hmm..

Unter D7 (6) ist das Verhalten von RadioButtons so, das sie Checked werden, wenn sie den Focus erhalten.

Nun ist es bei deinem U1 so, dass es kein Control hat, außer dem RadioButton1, welches überhaupt den Focus (TabStop=True) erhalten kann.
(Die SpeedButtons können per se kein Focus erhalten)

Wenn Du somit U2 schießt, dann erhält das einzige Control auf U1 mit TabStop=True den Focus, somit der Radiobutton1, welcher dann gecheckt wird!

Platziere einfach ein Edit auf U1 und setze den Focus darauf, bevor U2 aufgerufen wird..

Siehe da, der Wechsel funktioniert und beim Schließen von U2 auch noch immer vorhanden, da der Focus im Edit steht..

Das mit Der Listbox hat bereits a.def begündet..

a.def 26. Apr 2017 16:50

AW: RadioButton seltsames Verhalten
 
Zitat:

Platziere einfach ein Edit auf U1 und setze den Focus darauf, bevor U2 aufgerufen wird..
Und was, wenn man das Edit nicht braucht, oder es den Fokus nicht erhalten soll?

wendelin 26. Apr 2017 17:07

AW: RadioButton seltsames Verhalten
 
Hallo,

ich danke Euch allen für Eure Tip's und Erklärungen.
Das mit dem Focus wusste ich nicht.
Die Situation mit Listbox2 in Form2 werde ich ausprobieren.

Nochmals Danke
Wendelin

Michael II 26. Apr 2017 17:50

AW: RadioButton seltsames Verhalten
 
Hallo Wendelin

danke für dein Minimalprojekt.

Ich kann das von dir beschriebene Verhalten für XE6 bestätigen.

Wie du beschreibst:
1a. u2 - rb => r2 checked - ich klick auf form 1 => radio 1 checked [nicht gut]
1b. u2 - rb => r2 checked - f2 schliessen => radio 1 checked [nicht gut]

Wenn du zuerst RadioButton2 klickst und dann 1a oder 1b ausführst, dann bleibt RadioButton2 wie erwartet aktiv:
2a. r2 checken - u2 - rb - r2 checked - ich klick auf form 1 => radio 2 bleibt aktiv [gut]
2b. r2 checken - u2 - rb => r2 checked - f2 schliessen => radio 2 bleibt aktiv [gut]


Ich empfehle dir diesen Workaround:
Füge in unit1 für Form1 hinzu:
Delphi-Quellcode:
procedure TForm1.RadioButton1Click(Sender: TObject);
begin
  RadioButton1.SetFocus;
end;

procedure TForm1.RadioButton2Click(Sender: TObject);
begin
  RadioButton2.SetFocus;
end;
Ändere in unit2 für Form 2:

Delphi-Quellcode:
procedure TForm2.SpeedButton2Click(Sender: TObject);
begin
  Form1.RadioButton2Click( self ); // NEU
  // Form1.RadioButton2.Checked := True; // BISHER  
end;

In XE6 funktioniert es so - ich habe gerade keine Zeit für Tests in Delphi 7.

NEU
1a. u2 - rb => r2 checked - ich klick auf form 1 => radio 2 checked [gut]
1b. u2 - rb => r2 checked - f2 schliessen => radio 2 checked [gut]

Ich hoffe es funktioniert auch bei dir.

Gruss
Michael

a.def 26. Apr 2017 18:14

AW: RadioButton seltsames Verhalten
 
Oder einfach nach DX10.2 Starter wechseln :stupid:

HolgerX 26. Apr 2017 18:37

AW: RadioButton seltsames Verhalten
 
Zitat:

Zitat von a.def (Beitrag 1369200)
Zitat:

Platziere einfach ein Edit auf U1 und setze den Focus darauf, bevor U2 aufgerufen wird..
Und was, wenn man das Edit nicht braucht, oder es den Fokus nicht erhalten soll?

Generell sollte EIN Control auf der Form Vorhanden sein, welches den Fokus kriegen kann. Dies kann auch ein Button sein.

In seinem Beispiel hatte er nur die Speedbuttons (können keinen Focus kriegen) und die Radiobuttons (Nur Nr 1 hatte TabStop=True) und Panels (auch kein Focus).

Deshalb hat das einzige vorhandene Control mit Focusmöglichkeit diesen bekommen, wie das Formular wieder aktiviert wurde.
Und zwar der RadioButton1...

Der Einfachheit halber könnte er die Speedbuttons gegen Buttons austauschen und gut wärs..

a.def 26. Apr 2017 19:09

AW: RadioButton seltsames Verhalten
 
Das Formular kann aber auch den Fokus annehmen oder irre ich mich? Ein einfaches SetFocus;

Michael II 26. Apr 2017 19:57

AW: RadioButton seltsames Verhalten
 
Holger Hallo

ja, ich weiss, was du meinst - Wendelin hat die TabStops gesetzt wie du schreibst.

Wendelin kann aber wie beschrieben den Fokus auf RadioButton2 setzen und dann funktioniert's sicher auch mit seinem alten Delphi und RadioButton2 bleibt gecheckt, wenn Form2 geschlossen wird.

Oder Wendelin schreibt seine Killer App und finanziert sich damit seine Weiterreise nach Tokyo :-D.

Gruss

Ich bin raus. Thema kocht über...

HolgerX 27. Apr 2017 04:15

AW: RadioButton seltsames Verhalten
 
Hm...

Zitat:

Zitat von a.def (Beitrag 1369223)
Das Formular kann aber auch den Fokus annehmen oder irre ich mich? Ein einfaches SetFocus;

Die Form ist ein Container.
Du kannst zwar setFocus machen, aber wenn ein Control mit TabStop=true vorhanden ist, wird an dieses dann vom Container der Focus weiter gereicht.


Zitat:

Zitat von Michael II (Beitrag 1369224)
Oder Wendelin schreibt seine Killer App und finanziert sich damit seine Weiterreise nach Tokyo :-D.

;)


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:52 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