Autor Beitrag
Orothred
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 86


C# (VS 2005)
BeitragVerfasst: Di 17.07.07 18:29 
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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 866
Erhaltene Danke: 43

Win 7
TurboDelphi, Visual Studio 2010
BeitragVerfasst: Di 17.07.07 18:44 
sind die chedkboxen auseinander oder nah beisammen. Wenn letzteres könntest du eine Tradiogroup nehmen
Orothred Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 86


C# (VS 2005)
BeitragVerfasst: Di 17.07.07 18:53 
ne, ich würde gerne bei den checkboxen bleiben
Jann1k
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 866
Erhaltene Danke: 43

Win 7
TurboDelphi, Visual Studio 2010
BeitragVerfasst: Di 17.07.07 18: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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10183
Erhaltene Danke: 1256

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Di 17.07.07 18: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

_________________
There are 10 types of people - those who understand binary and those who don´t.
TheNeon
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 408

Windows
VS2010 C#
BeitragVerfasst: Di 17.07.07 19: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.

_________________
Phantasie ist wichtiger als Wissen, denn Wissen ist begrenzt.
(c) Albert Einstein
Lannes
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2352
Erhaltene Danke: 4

Win XP, 95, 3.11, IE6
D3 Prof, D4 Standard, D2005 PE, TurboDelphi, Lazarus, D2010
BeitragVerfasst: Di 17.07.07 20:00 

_________________
MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )
Biergeneral
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 35

WIN XP
Delphi 7 Ent., Delphi 2007 Ent., C/C++ (Eclipse)
BeitragVerfasst: Mi 18.07.07 15: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..

ausblenden volle Höhe 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ß