Dyn Komponenten ->mehrere Zeilen in Methode



  • Hallo,

    ist es möglich bei dyn. erstellten Komponenten, dem onClick Ereignis mehre
    Zeilen zuzuweisen?

    button[i]->onClick=Button1Click;
                       Edit1->Text="Text";
    

    Wie bekomme ich die 2.Zeile dazu?

    Danke Mark



  • Die "zweite Zeile" schreibst du in das Button1Click-Event.



  • Danke, aber sorry ich vestehe nicht ganz.
    Ich erstelle hier jetzt 5 Tbuttons und jeder soll in seinem ButtonXClick etwas
    anderes bekommen.Wie komme ich jetzt an ButtonXClick in der Schleife zur Designzeit heran?



  • Es muss doch eine Funktion ala

    void __fastcall ButtonXClick(TObject *Sender)
    {
      //irgendwas
    }
    

    existieren. Und bei irgendwas schreibst du halt deine zweite Zeile mit rein.



  • Das Problem ist, das ganau das zur Designzeit noch nicht zur Verfügung steht,
    der die Buttons ja erst zur Laufzeit erzeugt werden.



  • Die Buttons kannst du zur Laufzeit erstellen, aber nicht die OnClick-Funktion. Die muss zur Entwurfszeit existieren, sonst kannst du sie nicht mit

    button[i]->onClick=Button1Click;
    

    zuweisen.



  • Soweit habe ich es kapiert, aber wie kann ich jetzt mehrere Befehlszeilen der
    in Schleife benutzen?

    button[i]->onClick=Label->Caption="Hallo":
                              Edit1->Text="Welt";//wie kann ich die Zeile einfügen?
    

    Dafür finde ich keine Lösung.Wie in verschiedenen anderen Treads steht, kann man hier auch keine eigene Klasse einfügen.



  • Du packst alle Aktionen in eine eigene Methode, die du dort einträgst:

    void __fastcall ButtonXClick(TObject *Sender)
    {
      Label->Caption="Hallo";
      Edit1->Text="Welt";
    }
    
    button[i]->onClick = ButtonXClick;
    


  • [C++ Fehler] Unit1.cpp(293): E2451 Undefiniertes Symbol 'Label1'
    [C++ Fehler] Unit1.cpp(293): E2451 Undefiniertes Symbol 'Edit1'
    

    obgleich beide bereits zur Designzeit vorhanden sind.

    Dann kann ich in der Schleife die onClick Methode nicht zuweisen:

    button[i]->OnClick="Button"+IntToStr(i)+"Click";
    

    Diese Version geht ja wohl nicht



  • heutmalhier schrieb:

    [C++ Fehler] Unit1.cpp(293): E2451 Undefiniertes Symbol 'Label1'
    [C++ Fehler] Unit1.cpp(293): E2451 Undefiniertes Symbol 'Edit1'
    

    obgleich beide bereits zur Designzeit vorhanden sind.

    Vermutlich nicht in der Klasse, um die es geht - zur Not solltest du über den Parameter "TObject* pSender" auf dein Fenster zugreifen können.

    Dann kann ich in der Schleife die onClick Methode nicht zuweisen:

    button[i]->OnClick="Button"+IntToStr(i)+"Click";
    

    Diese Version geht ja wohl nicht

    Nein, sowas geht in C++ bestimmt nicht - du kannst den Namen einer Funktion nicht erst zur Laufzeit zusammenbauen (in diesem Moment existiert die Funktion gar nicht mehr unter diesem Namen, sondern nur als Speicheradresse).



  • Vielleicht bin ich auch ganz auf dem Holzweg mit meinen Fragen, ich versuche nur dyn erstellten TButtons eine jeweils unterschiedliche bestimmte Funktion zuzuweisen.Wie ist denn hier der übliche Weg. Bei den FAQ-Beispielen steige ich nicht ganz durch.



  • Der übliche Weg dürfte sein, allen Buttons dasselbe OnClick-Event zuzuweisen. Im OnClick kannst du über den Sender ermitteln, welcher Button das Event ausgelöst hat und dann den jeweils gewünschten Code ausführen.
    Siehe FAQ, Komponenten - Zugriff nicht über Namen; zur Lauzeit erstellen ...; dynamische Arrays.


Anmelden zum Antworten