Komponente zur Laufzeit erstellen: Dynamischer Name



  • Hallo!

    Ich erzeuge eine Komponente - in diesem Fall TButton - zur Laufzeit.

    TButton *Button1 = new TButton(this);
      Button1->Top      = 10;
      Button1->Left     = 10;
      Button1->Caption  = "Caption";
      Button1->Parent=this;
    

    Das Problem ist, dass der Name direkt definiert wird.
    Ich möchte diesen Vorgang beliebig ausführen, sodass der Name zum Beispiel durch einen String und einem Integer entsteht. Innerhalb einer for-Schleife soll der jeweilige Name kreiert werden.

    Button + i
    

    Anschließend möchte ich die Buttons außerhalb dieser Funktion benutzen.

    Danke im Voraus und Tschö!



  • .... also ich hab das mal so gelöst. Eventuell hilft es weiter.

    Gruß

    Werner

    #include <vcl.h>
    #pragma hdrstop
    
    #include "Unit1.h"
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    TForm1 *Form1;
    TButton *MeinButton[4] = {0};
    //---------------------------------------------------------------------------
    __fastcall TForm1::TForm1(TComponent* Owner)
            : TForm(Owner)
    {
    }
    //---------------------------------------------------------------------------
    
    void __fastcall TForm1::FormCreate(TObject *Sender)
    {
    
    int lft = 10;
    for (int i = 1;i < 4; i++)
    {
                MeinButton[i] = new TButton(this);
                MeinButton[i]->Parent = Form1;
                MeinButton[i]->Left = lft;
                MeinButton[i]->Top = 10 ;
                MeinButton[i]->Caption = "Button " + IntToStr(i);
    
                lft = lft + 100;
                }
    }
    //---------------------------------------------------------------------------
    


  • Fantastisch! Goldig!
    Genau so etwas habe ich gemeint. Ich danke dir!



  • Hallo

    Die Lösung mit einem Array hättest du auch in der FAQ hier im Builder-Forum finden können.

    bis bald
    akari


Anmelden zum Antworten