| Autor |
Beitrag |
Stread
      
Beiträge: 188
Win 7
Delphi XE
|
Verfasst: Mi 18.02.09 17:56
Wie kann ich es machen dass von 12 RadioButtons die ich auf ein Panel gesetzt habe 5 Stück anwählbar sind?
Parent? Neues Panel?
Im Moment ist nur 1 gleichzeitig anwählbar?
Danke für die Hilfe.
Zuletzt bearbeitet von Stread am Mi 18.02.09 19:52, insgesamt 1-mal bearbeitet
|
|
Dunkel
      
Beiträge: 682
Mac OS X Snow Leopard
Xcode 3.1
|
Verfasst: Mi 18.02.09 18:09
Nimm Checkboxes! Ist eh Windows-konformer, der User ist nicht ganz so verwirrt als wenn er aufeinmal mehrere RadioButtons anwählen kann.
_________________ Ich streite einsam mich mit dieser Oberflächenwelt
Gutes sei ein löblich Brot von dem ich zehre - bis zum Tod [Das Ich - Im Ich]
|
|
Heiko
      
Beiträge: 3169
Erhaltene Danke: 11
|
Verfasst: Mi 18.02.09 18:09
Hallo,
wenn du alle möglichen Kombinationen zulasssen möchtest (also 5 aus 12) muss ich dich eldier enttäuschen: dafür sind Radioboxen nicht gemacht. Radioboxen sollen dem USer suggestieren, dass er nur eine Sache auswählen kann und nicht mehrere. Für letzteres sind Checkboxen da, die du auch auf eine bestimmte Anzahl beschränken kannst (zähler im Hintergrund und bei Überschreitung aktion ablehnen). Wenn du nicht alle Möglichkeiten zulassen möchtest, könntest du über Panels dafür sorgen, dass das ganze auch geht - allerdings vermute ich mal, dass du nicht letzteres meinst.
|
|
Dude566
      
Beiträge: 1592
Erhaltene Danke: 79
W8, W7 (Chrome, FF, IE)
Delphi XE2 Pro, Eclipse Juno, VS2012
|
Verfasst: Mi 18.02.09 18:14
Also ich glaube mehrere RadioButtons sind nicht möglich, das ist ja auch der Sinn.^^
Würde dann wie Dunkel schon sagte CheckBoxes nehmen.
_________________ Es gibt 10 Gruppen von Menschen: diejenigen, die das Binärsystem verstehen, und die anderen.
|
|
Stread 
      
Beiträge: 188
Win 7
Delphi XE
|
Verfasst: Mi 18.02.09 18:17
Ich habe auch zuerst an Checkboxen gedacht aber bei diesen ist das Problem dass ich alle 12 auswählen kann. Ich will aber nur irgenwelche 5 auswählen. Wie gehts das?
|
|
Dude566
      
Beiträge: 1592
Erhaltene Danke: 79
W8, W7 (Chrome, FF, IE)
Delphi XE2 Pro, Eclipse Juno, VS2012
|
Verfasst: Mi 18.02.09 18:20
Meinst du etwa, die sollen alle ausgewählt werden, wenn eine Bedingung eintritt?
Delphi-Quelltext 1:
| CheckBox1.Checked := true; |
_________________ Es gibt 10 Gruppen von Menschen: diejenigen, die das Binärsystem verstehen, und die anderen.
|
|
Stread 
      
Beiträge: 188
Win 7
Delphi XE
|
Verfasst: Mi 18.02.09 18:38
Nein, ich will dass die Checkboxen z.B 1-12 heißen. Muss muss nun 5 (egal welche) von diesen Checkboxe anklicken damit es weiter geht. Erst wenn man 5 Checkboxen markiert hat geht es weiter.
Aber man darf auch nicht mehr anklicken können. Also man darf am ende nicht 7 markierte Checkboxen haben.
Im moment ist das Problem dass ich entweder nur eine Checkbox oder gleich alle 12 anklicken kann.
Ich möchte soetwas in der Art wie wenn 5 Checkboxen ausgewählt sind dass dann alle anderen nicht mehr anwählbar sind. Wenn man den Haken von einer bereits angewählten Checkbox wieder entfernt soll man wieder eine neue auswählen können.
|
|
Dude566
      
Beiträge: 1592
Erhaltene Danke: 79
W8, W7 (Chrome, FF, IE)
Delphi XE2 Pro, Eclipse Juno, VS2012
|
Verfasst: Mi 18.02.09 18:42
Wie wäre es denn mit If-Abfragen?
Und um zu verhindern eine 6 anzuwählen, einfach die nicht ausgewählten bei Visible auf False stellen.
_________________ Es gibt 10 Gruppen von Menschen: diejenigen, die das Binärsystem verstehen, und die anderen.
|
|
Heiko
      
Beiträge: 3169
Erhaltene Danke: 11
|
Verfasst: Mi 18.02.09 18:46
Bitte nicht Visible, sondern enable. Komponenten einfach ausblenden ist unschön  .
|
|
Dude566
      
Beiträge: 1592
Erhaltene Danke: 79
W8, W7 (Chrome, FF, IE)
Delphi XE2 Pro, Eclipse Juno, VS2012
|
Verfasst: Mi 18.02.09 18:47
Ja stimmt, haste recht. Meinte ich doch auch. 
_________________ Es gibt 10 Gruppen von Menschen: diejenigen, die das Binärsystem verstehen, und die anderen.
|
|
Stread 
      
Beiträge: 188
Win 7
Delphi XE
|
Verfasst: Mi 18.02.09 19:51
Aber wird der Code damit nicht unnötig groß? Ich müsste ja mit der if Abfrage klären ob Checkbox1 und Checkbox2 ...Checkbox12 markiert sind dann muss ich schauen dass nur 5 markiert sind (Wie gehts das am besten ohne dass ich alle Möglichen Kombinationen nenne?)
Wenn ich nun viel mehr Checkboxen hätte, wie soll das denn dann gehen?
|
|
DeddyH
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Mi 18.02.09 20:06
Wieso merkst Du Dir nicht einfach in einer privaten Form-Property, wieviele Checkboxen gerade Checked sind? Und Du kannst Dir einen globalen Handler für alle Checkboxen schreiben, der diese Property entsprechend setzt.
|
|
Stread 
      
Beiträge: 188
Win 7
Delphi XE
|
Verfasst: Mi 18.02.09 20:10
Entschuldige aber das kapiere ich gerade nicht. Wie soll man so einen Handler machen? Bin noch Anfänger 
|
|
DeddyH
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Mi 18.02.09 20:21
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: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71:
| unit Unit1;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls;
type TForm1 = class(TForm) CheckBox1: TCheckBox; CheckBox2: TCheckBox; ... procedure FormCreate(Sender: TObject); private FCheckCount: Cardinal; procedure SetChecksEnabled(Sender: TObject); public end;
var Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject); var i: Integer; begin for i := 0 to ControlCount-1 do if Controls[i] is TCheckbox then TCheckBox(Controls[i]).OnClick := SetChecksEnabled; end;
procedure TForm1.SetChecksEnabled(Sender: TObject); var i: Integer; begin if (Sender as TCheckBox).Checked then begin Inc(FCheckcount); if FCheckCount > 4 then for i := 0 to ControlCount-1 do if Controls[i] is TCheckbox then TCheckBox(Controls[i]).Enabled := TCheckBox(Controls[i]).Checked; end else begin Dec(FCheckcount); if FCheckCount < 5 then for i := 0 to ControlCount-1 do if Controls[i] is TCheckbox then TCheckBox(Controls[i]).Enabled := True; end; end;
end. |
Wobei der Ausdruck Property hier falsch gewählt war, bei FCheckCount handelt es sich vielmehr um ein privates Feld 
|
|
Stread 
      
Beiträge: 188
Win 7
Delphi XE
|
Verfasst: Mi 18.02.09 20:52
Danke. Allerdings habe ich noch ein paar Fragen wenn es recht ist.
Das ControlCount-1 in Zeile 35 und Controls in Zeile 36, dass wirkt sich auf alle Checkboxen aus wegen TCheckbox?
Wie kann das sein: if Controls[i] is TCheckbox then ? Wie ist Controls[i]=TCheckbox? Ist das immer so?
Bei Zeile 53 Ist TCheckbox(Controls[i]) Das sind alle möglichen Checkboxen?
Bei Zeile 44 wird gesagt dass der Sender nicht z.B. OnClick ist sonder die Checkbox?
Das Inc in Zeile 47 ist das gleiche wie wenn ich in einer Repeat Schleife immer x:=x+1; machen würde?
Sorry für das viele Gefrage.
|
|
DeddyH
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Mi 18.02.09 21:08
|
|
Stread 
      
Beiträge: 188
Win 7
Delphi XE
|
Verfasst: Mi 18.02.09 21:19
Danke. Ich werde damit noch ein wenig rumspielen um es besser zu verstehen. Wenn ich noch Fragen habe melde ich mich wieder.
|
|
Stread 
      
Beiträge: 188
Win 7
Delphi XE
|
Verfasst: Do 19.02.09 10:21
Noch eine Frage dazu:
Wie kann ich einfach feststellen welche Checkbox ausgewählt wurde? Ich möchte die 5 Zahlen die mit der Checkbox ausgewählt wurden gerne einzeln mit anderen Zahlen vergleichen. Muss ich 12 mal überprüfen ob die Checkbox markiert ist? Dann weiße ich ihr einen Wert zu. z.B. Bei Checkbox3 x3:=3 und bei Checkbox11 x11:=11 ? Ich will ja die Zahlen einzeln haben. Wie finde ich dann raus welche 5 x'e größer 0 sind und welche Zahl sie haben?
Wahrschenlich geht es eh ganz anderst 
|
|
jaenicke
      
Beiträge: 19346
Erhaltene Danke: 1754
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Do 19.02.09 10:32
Du könntest die Tag-Eigenschaft der Checkboxen benutzen. Wenn du dort die entsprechenden Zahlen 1..12 einträgst, dann kannst du via (Sender as TCheckBox).Tag die Nummer der gerade geklickten CheckBox abfragen. Wenn du dann später diese Informationen brauchst, dann kannst du diese einfach in ein array[1..12] of Boolean eintragen. Dieses Array kannst du unter private in der Formulardeklaraton deklarieren.
|
|
Stread 
      
Beiträge: 188
Win 7
Delphi XE
|
Verfasst: Do 19.02.09 11:04
Muss ich das jetzt 12 mal so eintragen?
Delphi-Quelltext 1: 2: 3:
| procedure TForm12.Button1Click(Sender: TObject); if (Sender as TCheckbox).Tag=7 then Zahl[7]=7 |
Wie bekomme ich denn nun die einzelnen Zahlen um sie mit anderen zu vergleichen?
Sorry aber ich kapiere das gerade nicht so wie du das meinst. Ein bisschen Quelltext würde ich sehr begrüßen wenn du nicht allzusehr beschäftigt bist. 
|
|