Autor Beitrag
tortom1000
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 175

Win XP, Win Server 2003 - 2012, Win 7
Delphi 7
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 552


(D3/D7/D8) Prof.
BeitragVerfasst: Do 11.05.06 11:16 
Kannst du nicht das OnClick-Event nehmen?
jasocul
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 6393
Erhaltene Danke: 147

Windows 7 + Windows 10
Sydney Prof + CE
BeitragVerfasst: Do 11.05.06 11:17 
Oder eine Radiogroup. Da kann immer nur einer ausgewählt werden.
Spaceguide
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 552


(D3/D7/D8) Prof.
BeitragVerfasst: Do 11.05.06 11:21 
Jasocul, bitte Beiträge lesen, bevor du antwortest.
jasocul
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 6393
Erhaltene Danke: 147

Windows 7 + Windows 10
Sydney Prof + CE
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 175

Win XP, Win Server 2003 - 2012, Win 7
Delphi 7
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 6393
Erhaltene Danke: 147

Windows 7 + Windows 10
Sydney Prof + CE
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 374

WIN 2000prof, WIN XP prof
D7EP, MSSQL, ABSDB
BeitragVerfasst: Do 11.05.06 14:17 
Moin :-)
Wie user profile iconjasocul 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:
ausblenden 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; //--nur als Beispiel
end;

procedure FormXYZ.CheckBox2MouseUp(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  CheckBox1.State := cbUnChecked;
  Edit2.SetFocus;  //--nur als Beispiel
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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 175

Win XP, Win Server 2003 - 2012, Win 7
Delphi 7
BeitragVerfasst: 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