Entwickler-Ecke
Grafische Benutzeroberflächen (VCL & FireMonkey) - Zwei Checkbox'en in Abhängigkeit zueinander und SetFocus
tortom1000 - Do 11.05.06 11:13
Titel: Zwei Checkbox'en in Abhängigkeit zueinander und SetFocus
Hallo,
ich habe auf einem Formular zwei Checkboxen.
Im OnEnter der Checkbox1 steht: CheckBox2.checked:=false;
Im OnEnter der Checkbox2 steht: CheckBox1.checked:=false;
Klicke ich auf CheckBox1, wird CheckBox2 abgewählt und
umgekehrt, so das jeweils immer nur eine oder gar keine
Checkbox angewählt sein kann.
Das funktioniert soweit.
Nun möchte ich, nachdem die Anweisungen im OnClick abgearbeitet
wurden, einen DBGrid mittels DBGrid1.SetFocus "aktivieren".
Dabei tritt folgender Fehler auf:
Checkbox1 ist "angehakt". Klicke ich nun auf CheckBox2, dann
wird zwar CheckBox1 "abgehakt", aber CheckBox2 NICHT "angehakt".
Erst ein weiterer Klick hakt dann CheckBox2 an.
Gleiches gilt auch umgekehrt mit Klick auf CheckBox1.
Das Ganze liegt an der SetFocus-Anweisung; nehme ich die raus
reicht wieder ein Klick zum "anhaken".
Leider ist die SetFocus-Anweisung wichtig, da man im Grid die
Daten anwählt und daher der Grid immer den Focus hat.
(Klar könnte ich die gewünschte Funktion auf einen Button legen
und diesen dann umbenennen, damit ersichtlich ist, was angewählt
wurde, aber die CheckBox'en gefallen mir vom Layout erheblich
besser...)
Hat jemand dazu einen Tip parat?
Gruß
Tortom
Spaceguide - Do 11.05.06 11:16
Kannst du nicht das OnClick-Event nehmen?
jasocul - Do 11.05.06 11:17
Oder eine Radiogroup. Da kann immer nur einer ausgewählt werden.
Spaceguide - Do 11.05.06 11:21
Jasocul, bitte Beiträge lesen, bevor du antwortest.
jasocul - Do 11.05.06 11:32
Was habe ich denn falsch gelesen? Bei einer Radiogroup mit drei Schaltern, könnte man genau das gewünschte realisieren. RadioButtons sind genau für eine solche Auswahl vorgesehen. Sie sehen auch nicht viel anders aus als eine CheckBox.
@tortom1000:
Dein Problem entsteht dadurch, dass du im OnEnter ein SetFocus machst. Dadurch wird das offensichtlich nicht mehr vollständig ausgeführt. Ich kenne deinen Source zwar nicht, aber vielleicht steht dein SetFocus am Anfang der Methode. Schreibe sie mal als letztes hin, falls das so ist.
tortom1000 - Do 11.05.06 12:14
Hi jasocul,
das SetFocus befindet sich im OnClick am Ende.
Im OnEnter ist lediglich das
CheckBox1.checked:=false; bzw. CheckBox2.checked:=false;
Der Source im OnClick ist nicht ausschlaggebend. Das
habe ich schon ausprobiert, indem ich als einzige
Anweisung das DBGrid.SetFocus im OnClick belassen habe.
Der Fehler war der Gleiche...
Gruß
Tortom
(Ich schaue mir mal die RadioGroup an.)
jasocul - Do 11.05.06 12:29
Ich erinnere mich gerade an eine alte Anwendung von mir, wo ich mit ähnlichen Problemen zu kämpfen hatte.
Sobald du in CheckBox1 das Checked von CheckBox2 setzt, wird automatisch ein OnClick der CheckBox2 ausgelöst. Außerdem verliert CheckBox1 dadurch den Focus.
Könnte es vielleicht daran liegen?
raiguen - Do 11.05.06 14:17
Moin :-)
Wie
jasocul angedeutet hat, wird bei einer CheckBox jedesmal das OnClick-Ereignis durchlaufen, wenn der Status der CheckBox mit
CheckBox.Checked := True (oder False) geändert wird... :roll:
@ tortom1000: Zur Lösung des Problems folgender Vorschlag:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| procedure FormXYZ.CheckBox1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin CheckBox2.State := cbUnchecked; Edit1.SetFocus; end;
procedure FormXYZ.CheckBox2MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin CheckBox1.State := cbUnChecked; Edit2.SetFocus; end; |
Also die Statusänderung der CheckBoxen über
Checkbox.State und im MouseUp-Ereignis; somit hast Du das gewünschte Ergebnis ;-)
Die Ereignisse OnClick bzw OnEnter würde ich für Dein Vorhaben also nicht empfehlen...
tortom1000 - Fr 12.05.06 08:27
@raigen: ich habe jetzt alles in das MouseUp gepackt, wie Du es
empfohlen hast, und es funktioniert. DANKE!!!
@jasocul: deine Lösung mit der Radiogroup hatte ich auch getestet.
Das funktionierte ebenfalls, nur gefiel mir das Layout nicht. Die runden
Knöpfe sahen irgenwie nicht passend zu den anderen eckigen CheckBox'en
im Programm aus. Da hätte ich wohl von Anfang an die Radiobutton verwenden
müssen...
Vielen Dank für eure Unterstützung.
Gruß Tortom
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 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!