Entwickler-Ecke

Grafische Benutzeroberflächen (VCL & FireMonkey) - Nur eine CheckBox aktivieren


Orothred - Di 17.07.07 17:29
Titel: Nur eine CheckBox aktivieren
Ich habe in einer Form mehrere CheckBoxen. Wie kann ich es einrichten, das nur eine einzige CheckBox aktiviert werden darf?


Moderiert von user profile iconGausi: Topic aus Sonstiges (Delphi) verschoben am Di 17.07.2007 um 18:33


Jann1k - Di 17.07.07 17:44

sind die chedkboxen auseinander oder nah beisammen. Wenn letzteres könntest du eine Tradiogroup nehmen


Orothred - Di 17.07.07 17:53

ne, ich würde gerne bei den checkboxen bleiben


Jann1k - Di 17.07.07 17:55

Also mir fällt dann keine bessere Variante ein, als alle Checkboxen so zu benennen, dass sie durchnummeriert sind (cb1, cb2, cb3...) und dann eine Prozedur zu schreiben, die alle Checkboxen auf uncheck setzt ausser die aktuell angeklickte.
Mit findcomponent eben


Narses - Di 17.07.07 17:57

Moin und :welcome: im Forum!

user profile iconOrothred hat folgendes geschrieben:
ne, ich würde gerne bei den checkboxen bleiben

Laut Designstyleguide sind Checkboxen aber als optisches Erkennungsmerkmal für Mehrfachauswahlen da, genauso wie Radiobuttons schon optisch auf eine Ausschlussauswahl hinweisen sollen. Wenn du dich nicht daran hältst, dann ist dein Programm nicht mehr intuitiv bedienbar - und das ist IMHO ein Nachteil! :mahn: :|

cu
Narses


TheNeon - Di 17.07.07 18:31

Also ich habe in meinem Programm auch lieber Checkboxes, passt besser zum Design ... zudem kommt es auf den Einsatz an. Ich habe es bei der kleinen Zahl so gemacht, dass ich mir eine Procedure geschrieben habe, die alle Checkboxes auf unchecked setzt und am Schluss dann die gerade angeklickte auf checked. Im Gegenteil zu Jann1k habe ich es mit direkten Namen gemacht, ohne FindComponent, aber bei mehreren Boxen sollte seine Variante bevorzugt werden.


Lannes - Di 17.07.07 19:00

Hallo,

:arrow: Delphi-Library: Mehrere Checkboxen voneinader abhängig machen [http://www.delphi-library.de/topic_Mehrere+Checkboxen+voneinader+abhaengig+machen_60271.html]


Biergeneral - Mi 18.07.07 14:44

Ich würd vielleicht Vorschlagen mit Tags zu Arbeiten..
Sprich alle Checkboxen die zu einer Gruppierung gehören bekommen das gleiche Tag.
Dann ist das ganze relativ einfach zu realisieren..


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
  [...] // Oben bei der Formulardeklaration
    procedure CheckboxChanged(Sender: TObject);
  private
    CheckBoxList    : TList;
    CheckBoxUpdating: Boolean;
  [...]

procedure TForm.Create(Sender:TObject);
var
  i : Integer;
begin
  CheckBoxList := TList.Create;
  CheckBoxUpdating := false; // gegen Stacküberlauf
  for i := 0 to ComponentCount -1 do
  if Components[i] is TCheckbox then
    CheckBoxList.Add(Components[i]);
end;

procedure TForm.Destroy;
begin
  [...]
  CheckBoxList.Free;
  inherited;
end;

procedure TForm.CheckboxChanged(Sender: TObject);  // Ereignis für alle Checkboxen
var
  i : Integer;
begin
  if not CheckBoxUpdating and (Sender is TCheckbox) then
  begin
    CheckBoxUpdating := true;
    for i := 0 to CheckBoxList.Count -1 do
    if TComponent(CheckBoxList[i]).Tag = TComponent(Sender).Tag then
      TCheckbox(CheckBoxList[i].Checked := not (CheckboxList[i] = Sender);
    CheckBoxUpdating := false;
  end;
end;


Gruß