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
Gausi: 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!
Orothred 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.
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:
| [...] procedure CheckboxChanged(Sender: TObject); private CheckBoxList : TList; CheckBoxUpdating: Boolean; [...]
procedure TForm.Create(Sender:TObject); var i : Integer; begin CheckBoxList := TList.Create; CheckBoxUpdating := false; 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); 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ß
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 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!