Event von Dynamisch erzeugten Objekten



  • Hi ich habe ein kleines Problem, ich hoffe ihr könnt mir helfen!

    Also ich habe ein Objekt Dynamisch zur Laufzeit erstellt, hier der Codeteil der Dynamischen erzeugung zur Laufzeit:

    [cpp]
    frmMain->mybutton[i] = new(TButton)(frmMain->Pannel);
    frmMain->mybutton[i]->Parent = frmMain->Pannel;
    frmMain->mybutton[i]->SetBounds(8, (17 * (i+1)), 73, 17);

    frmMain->mybutton[i]->OnClick = frmMain->mybuttonClick;
    [/cpp]

    Diesem weise ich wie man sieht ein Event zu mybuttonClick!

    void __fastcall TfrmMain::mybuttonClick(TObject *Sender)
    {
        //PROBLEM.....
    }
    

    Nun zu mein Problem:
    Ich brauche das [i] also die Nummer des Vektor-Zeigers in dem Event, wie bekomme ich die?
    mybutton[i] <---- das da 😞

    mfg n00by

    P.S. Ich Programmier grad ein Abschlussprojekt in BCB 6 und da bin ich auf diese Seite gestoßen.... hab mich gleich mal registriert und eure Tuts durchgelesen!
    ECHT GEILE SEITE



  • Such mal nach dynamic_cast in der Hilfe. Und lege ein besonderes Augenmerk auf die Tag-Eigenschaft, die so gut wie jedes Objekt besitzt.



  • Danke für die schnelle Hilfe!

    Aber da muss ich dir was beichten!
    Wir hatten ca vor 8 Wochen <dynamic_cast> in der Schule und ich peil das teil auf NULL!
    Ich habe keine Ahnung was der command macht noch wie man den einsetzt!

    Die Arbeit hab ich voll verhauen 😞

    Könntest mir da a bissel auf die Sprünge helfen, please?
    Link zum tut und ne erklärung was datt is <dynamic_cast> und sag jetzt nicht ich brauch auch denn this operator oder wie das heißt... den check ich auch auf NULL (der kam 1 Woche später dran) 😞

    mfg n00by



  • Da gibt's was:
    http://www.c-plusplus.net/forum/viewtopic.php?t=64150&highlight=dynamiccast

    Ansonsten: Tag nutzen und ein paar Grundlagen studieren... 😉



  • mach doch den dynamic cast erstmal "zu fuß".
    hört sich komisch an, is auch so 😃

    also du machst ne for schleife in der du i hochzählst und darin ne if abfrage die z.B. die caption checkt oder sonst etwas das eindeutig ist. und falls du das auf alle buttons anwenden willst, kannste dir die if abfrage schenken....
    damit kannste dann ganz easy alle buttons durchgehen (solltest natürlich die anzahl der erstellten buttons in ner variable speichern).

    hoffe das hilft dir erstmal, aber dynamic_cast ist in jedemfall mal eleganter 😉



  • Vielen Dank!
    Jetzt kann ich das Objekt ansprechen aber in der Schleife in der ich den Button erzeuge und ihm das Event mybuttonClick zuweise wird noch ein anderes Objekt erzeugt und zwar eine Form und darum brauch ich ja das [i]!
    Weil ich das anzeigen will

    myform[i]->Show();
    

    Also immer ein Button und eine Form gehören zusammen und der Button soll die entsprechende Form anzeigen (Sie haben immer den selben index)!
    Also brauch ich das [i] umd die Form anzusprechen!

    mfg n00by



  • Danke auch an "DeR_FiScH"

    Habe jetzt ne while schleife gemacht die herausfindet welcher Button geklickt wurde!

    void __fastcall TfrmMain::mybuttonClick(TObject *Sender)
    {
        int i=0;
        while((i < CHAN_MAX) && (mybutton[i] != Sender))
        {
            i++;
        }
    
        mybutton[i]->Caption = "ES TUTET";  //ZUM TESTEN
        myform[i]->Show();
    }
    

    Also vielen Dank!

    mfg n00by

    P.S.: Wenn einer ne Elegantere Methode weiß könnt ihr sie hier ja Posten THX@ALL!



  • So kompliziert ist das nun auch wieder nicht.

    In OnClick:

    TButton *pButton = dynamic_cast<TButton *> (Sender);
    
    if (pButton != NULL)
        i = pButton->Tag;
    else
        i = -1;
    
    // jetzt mit array hantieren
    

    In der Schleife zur Erstellung:

    frmMain->mybutton[i]->Tag = i;
    

Anmelden zum Antworten