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 male

    Checkbox[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 auch

    if (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. 🙂


Anmelden zum Antworten