Dynamisch erstellen Button anhand des Caption löschen



  • Hi Leute,

    in meinem Projekt kann sich jeder so viele Buttons erzeugen, wie er möchte:

    anz++;
    TButton *MyButton = new TButton(this);
    MyButton->Parent = this;
    MyButton->Left = 100 * anz;
    MyButton->Top = 100;
    MyButton->OnClick = Button2Click;
    MyButton->Caption = Edit1->Text;
    MyButton->Visible = true;
    MyButton->UpdateControlState();

    Jetzt soll der Benutzer auch die Möglichkeit haben seinen Button wieder zu löschen. Dieses soll anhand des Caption möglich sein.

    Hat jemand eine Idee und ein Beispiel wie dies zu machen ist?

    Muss ich eigentlich die Buttons alle löschen, wenn ich das Programm beende? Wenn ja, gibt es dafür dann eine möglichkeit, das automatisch machen zu lassen?

    Mic



    1. Siehe FAQ, "Komponenten - Zugriff nicht über Namen".

    2. Die Buttons haben ja einen Owner (hier this, also die Form). Dieser sorgt bei seiner eigenen Zerstörung selbstständig für die Zerstörung aller seiner Member, sie müssen also nicht explizit gelöscht werden.



  • Hallo,

    ich habe mir da mel nen Stück Code gebastelt:

    void __fastcall TForm1::Button2Click(TObject *Sender)
    {
       for(int i=0; i < Form1->ComponentCount; i++)
       {
          // eine spezielle Behandlung
          if (Form1->Components[i]->ClassNameIs("TButton"))
          {
             if (dynamic_cast<TLabel*>(Form1->Components[i])->Caption == Edit2->Text)
                ShowMessage("founded");
             else
                ShowMessage("not founded");
          }
       }
    }
    

    Dieser Funktioniert aber nicht, jedes mal wird mir not foundet angezeigt, ist da irgendwas dran falsch?

    Mic

    Edit:
    Bitte die Code-Tags benutzen. Danke!

    [ Dieser Beitrag wurde am 16.05.2003 um 10:41 Uhr von Jansen editiert. ]



  • Original erstellt von <mic>:
    [QB]if (dynamic_cast<TLabel*>(Form1->Components[i])->Caption == Edit2->Text)
    [QB]

    evtl sind die klammern falsch gesetzt, also so:
    if ( (dynamic_cast<TLabel*>(Form1->Components[i]))->Caption == Edit2->Text)

    und btw:
    find - found - found



  • Original erstellt von <mic>:
    ist da irgendwas dran falsch?

    Von deinem Englisch mal abgesehen? 😉

    Warum castest du nach TLabel, wenn du doch TButtons suchst?



  • Original erstellt von <mic>:
    *```cpp
    for(int i=0; i < Form1->ComponentCount; i++)
    {
    // eine spezielle Behandlung
    if (Form1->Components[i]->ClassNameIs("TButton"))
    {
    if (dynamic_cast<TLabel
    >(Form1->Components[i])->Caption == Edit2->Text)
    ShowMessage("founded");
    else
    ShowMessage("not founded");
    }
    }
    }

    Wieso nicht FindComponent statt der for-Schleife? Und das Casten wurde ja schon erwähnt.

    -junix


Anmelden zum Antworten