Autor |
Beitrag |
tortom1000
      
Beiträge: 175
Win XP, Win Server 2003 - 2012, Win 7
Delphi 7
|
Verfasst: Do 11.05.06 11:13
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
      
Beiträge: 552
(D3/D7/D8) Prof.
|
Verfasst: Do 11.05.06 11:16
Kannst du nicht das OnClick-Event nehmen?
|
|
jasocul
      
Beiträge: 6393
Erhaltene Danke: 147
Windows 7 + Windows 10
Sydney Prof + CE
|
Verfasst: Do 11.05.06 11:17
Oder eine Radiogroup. Da kann immer nur einer ausgewählt werden.
|
|
Spaceguide
      
Beiträge: 552
(D3/D7/D8) Prof.
|
Verfasst: Do 11.05.06 11:21
Jasocul, bitte Beiträge lesen, bevor du antwortest.
|
|
jasocul
      
Beiträge: 6393
Erhaltene Danke: 147
Windows 7 + Windows 10
Sydney Prof + CE
|
Verfasst: 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 
      
Beiträge: 175
Win XP, Win Server 2003 - 2012, Win 7
Delphi 7
|
Verfasst: 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
      
Beiträge: 6393
Erhaltene Danke: 147
Windows 7 + Windows 10
Sydney Prof + CE
|
Verfasst: 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
      
Beiträge: 374
WIN 2000prof, WIN XP prof
D7EP, MSSQL, ABSDB
|
Verfasst: 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...
@ 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 
      
Beiträge: 175
Win XP, Win Server 2003 - 2012, Win 7
Delphi 7
|
Verfasst: 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
|
|