Variable Anzahl Checkboxen
-
Hallo,
ich bin noch Programmieranfänger und hätte eine Frage bzgl. einer variablen ANzahl an Checkboxen.
D.h. wie schaffe ich es eine variable Anzahl an Checkboxen zu erstellen. Ohne das ich es auf meine Form ziehe sondern je nach bedarf eine weitere oder z.B. gleich 3 Checkboxen erstellt werden?
Danke für eure Mühe
-
Schau doch einfach mal in die FAQ unter "Komponenten benutzen"
zur Laufzeit erstellen, anzeigen und Events zuweisen
Dynamische Arrays von Komponenten oder Objekten
-
const int x = 5; TCheckBox *Checkbox[x]; for (int i = 0; i < x; i++) { Checkbox[i] = new TCheckBox(this); Checkbox[i]->Parent = this; Checkbox[i]->Height = 32; Checkbox[i]->Top = 30; Checkbox[i]->Show(); Checkbox[i]->Caption = FILINGSYSTEM->edtARTIKEL->Text + i; Checkbox[i]->Alignment = akLeft, akTop; Checkbox[i]->BiDiMode = bdLeftToRight; Checkbox[i]->Ctl3D = true; Checkbox[i]->Cursor = crDefault; Checkbox[i]->Enabled = true; Checkbox[i]->TabOrder = 3; Checkbox[i]->TabStop = true; Checkbox[i]->Width = 75;ok danke, ich habs. Noch eine Frage: Die Checkboxen stehen jetzt mitten im Raum gibt es eine Möglichkeit zu sagenn, dass sie nicht untereinander sondern nach jeder 2ten Checkbox nebeneinander stehen?
-
setze hier
Checkbox[i]->Height = 32;
Checkbox[i]->Top = 30;die gewünschten Werte ein
-
Hallo
du must selber Position (Left, Top) und Dimension (Height, Width) für jedes Control festlegen, anstatt Aligment zu benutzen.
Auch ist es Unsinn jedem Control dasselbe TabOrder zuzuweisen.bis bald
akari
-
Auch ist es Unsinn jedem Control
wie
Checkbox[i]->Show();
Checkbox[i]->BiDiMode = bdLeftToRight;
Checkbox[i]->Ctl3D = true;
Checkbox[i]->Cursor = crDefault;
Checkbox[i]->Enabled = true;da dies Defaultwerte sind
-
Guten Morgen,
ich hab es jetzt abgeändert, aber meine Checkboxen sind irgendwie nich auf gleicher Höhe, könnt ihr mir einen tipp geben?const int x = 10; TCheckBox *Checkbox[x]; for (int i = 0; i < x; i++) { Checkbox[i] = new TCheckBox(this); Checkbox[i]->Parent = this; Checkbox[i]->Height = 32; Checkbox[i]->Top = FILINGSYSTEM->btnAction->Top - i * 25 +30 ; if(i%2 == 0) { Checkbox[i]->Left = 10; Checkbox[i]->Top = 120+i*20; } else { Checkbox[i]->Left = 130; Checkbox[i]->Top = 120+i*20; } Checkbox[i]->Caption = FILINGSYSTEM->edtARTIKEL->Text + i; } } else ;
-
wozu machst du
Checkbox[i]->Top = FILINGSYSTEM->btnAction->Top - i * 25 +30;wenn du danach noch
Checkbox[i]->Top = 120+i*20;machst?
zum eigentlichen Problem:
du machst in der If-Abfrage beide maleCheckbox[i]->Top = 120+i*20;d.h. du zählst Top bei jeder CheckBox um 20 höher,
eventuell hilft hier ein (i-1) an der richtigen stelle
-
i-1 bringts hier nicht. Das andere was Linnea gesagt hat stimmt soweit. Ich würd aber mal drüber nachdenken wie du die Boxen verteilen willst und warum du einen vertikale Abstand von 20 einstellst, wo doch deine Boxen 32 hoch sind. Probier das hier mal
const int x = 10; TCheckBox *Checkbox[x]; for (int i = 0; i < x; i++) { Checkbox[i] = new TCheckBox(this); Checkbox[i]->Parent = this; Checkbox[i]->Height = 32; Checkbox[i]->Width = 100; if( i<x/2) { Checkbox[i]->Top = 120 + i*40; Checkbox[i]->Left = 10; } else { Checkbox[i]->Top = 120 + (i-x/2)*40; Checkbox[i]->Left = 120; } }
-
*seufz* jetzt muss ich das wohl doch hinschreiben
es reicht auchif (i%2 == 0) { Checkbox[i]->Left = 10; Checkbox[i]->Top = 120+i*20; } else { Checkbox[i]->Left = 130; Checkbox[i]->Top = 120+[b](i-1)[/b]*20; }um die Checkboxen in 2 Spalten darzustellen
[Edit] es kommt halt drauf an wie die Checkboxen angeordnet werden sollen:
CheckBox1 CheckBox2 CheckBox3 CheckBox4 CheckBox5 CheckBox6 ...oder Braunsteins-Lösung
CheckBox1 CheckBox6 CheckBox2 CheckBox7 CheckBox3 CheckBox8 ...
-
Stimmt allerdings.
