Einzelnen Beitrag anzeigen

raiguen
(Gast)

n/a Beiträge
 
#11

Re: Checkboxen machen mich wahnsinnig!

  Alt 17. Aug 2006, 19:37
Moin
Auch wenn das Problem gelöst scheint, so darf ich dennoch eine kleine Anmerkung machen !?
Wie bereits gesagt, löst das Setzen von Checked immer das Ereignis OnClick aus...soweit, so dumm *gg*
Es gibt aber eine einfache Lösung (sogar mit Delphi-Boardmitteln ). Hierzu ein kleines Beispielmit 3 Checkboxen:
Delphi-Quellcode:
procedure TForm.CheckBox1MouseUp(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
   CheckBoxStatus(Sender as TCheckBox);
end;

{zum 'Abfangen' der Leertaste, welche auch den Status setzen kann }
procedure TForm1.CheckBox1KeyUp(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if Key = ORD(#32) then CheckBoxStatus(Sender as TCheckBox);
end;
{ allg. Proc für die Checkboxen}
procedure TForm1.CheckBoxStatus(Sender: TcheckBox);
begin
   if Sender.Name = 'CheckBox1then
   begin
     Checkbox2.State := cbUnchecked; //--setzen des Status auf unchecked
     Checkbox3.State := cbUnchecked;
  end;
  if Sender.Name = 'CheckBox2then
   begin
     Checkbox1.State := cbUnchecked;
     Checkbox3.State := cbUnchecked;
  end;
  if Sender.Name = 'CheckBox3then
   begin
     Checkbox1.State := cbUnchecked;
     Checkbox2.State := cbUnchecked;
  end;
end;
Interessant ist hier Checkboxe.State, dessen Eigenschaft man durchaus zur Laufzeit setzen kann...entweder im MouseUp- oder wie hier 'weitergeleitet' an die Prozedure CheckBoxStatus. Somit umgeht man das Auslösen des OnClick-Ereignisses..
Eine Checkbos erhält automatisch den Status cbChecked, sobald sie angeklickt oder (sofern per Tab focusiert wurde) die Leertaste gedrückt wurde.
Sollen andere Checkboxen in Abhängigkeit einer bestimmten Checkbox den Status cbChecked erhalten, so löst man das elegant wiederum über
Code:
Checkbox.State := cbChecked


Ob eine Checkbox markiert ist, lässt sich zum einen ja über
Code:
if CheckBox.Checked then..
oder über
Code:
if Checkbox.State=cbChecked
ermitteln; für den häkchenfreien Zustand dann entsprechend so:
Code:
if not CheckBox.Checked then..
bzw
Code:
if Checkbox.State=cbUnChecked
..

Zu diesem Problem gibt es hier Abhängigkeiten mehrerer Checkboxen noch etwas mehr Codebeispiel.
...
  Mit Zitat antworten Zitat