Ereignisse bei dynamisch erzeugten Komponenten
-
Schau nochmal in die FAQ zu "Komponenten benutzen". Da gibt es einen Beitrag namens "Zugriff, aber nicht durch Namen"
http://www.c-plusplus.net/forum/viewtopic-var-t-is-39207.html
-
Wenn du die Komponenten dynamisch paarweise erzeugst kannst du sie in einem vektor ablegen:
#include <vector> #include <utility> typedef std::pair<TCheckBox*, TEdit*> Pair_t; typedef std::vector<Pair_t> PairVector_t; class TForm1 : public TForm { ... PairVector_t Paired_; ... }; __fastcall TForm1::TForm( TObject* Owner ) { for( int i = 0; i < 7; ++i ) { // Komponenten erzeugen TEdit* pEdit = new TEdit( this ); TCheckbox* pCheckbox = new TCheckBox( this ); pCheckBox->OnClick = OnClickMyCheckBox; // paarweise in Vektor einfügen Paired_.push_back( std::make_pair( pCheckBox, pEdit ) ); } } void __fastcall OnClickMyCheckBox( TObject* Sender ) { TCheckBox* pChk = dynamic_cast<TCheckBox*>( Sender ); if( NULL != pChk ) { // quick´n´n dirty, ein Function object und std::find wären schöner for( PairVector_t::iterator it = Paired_.begin(); it != Paired_.end(); ++it ) { if( it->first == pChk ) { TEdit* pEdit = it->second; // mach was pEdit } } } }
PS:
Alles Humbug, wenn du nur eine Zuordnung von CheckBox auf TEdit brauchst kannst die Adresse des zugehörigen TEdit an das Tag Attribut der ComboBox hängen:TEdit* pEdit = new TEdit( ... ); TCheckBox* pChk = new TCheckBox( ... ); pChk->Tag = reinterpret_cast<int>( pEdit ); TEdit * pEdt = reinterpret_cast<TEdit*>( pChk->Tag );
-
DocShoe schrieb:
Wenn du die Komponenten dynamisch paarweise erzeugst kannst du sie in einem vektor ablegen
Hab ich schon.
Mein Problem war nur, dass ich mit TObject * Sender nichts anfangen konnte, allerdings hat man mir jetzt verraten, dass ich per typecast auf die Eigenschaften der CheckBox zugreifen kann. Damit ist mir eigentlich schon geholfen.
Der Attribut-Tag ist jedenfalls ein sehr hilfreicher Hinweis, vielen Dank!
-
Nur mal als generelle Frage: wenn ich konkret Fragen zu einem FAQ-Beitrag habe, sollte ich diese dann hier oder direkt in der FAQ stellen?
Grüße,
GoldenAge
-
Hallo
Die FAQs sind sowieso nur für die Moderatoren des jeweiligen Forums bearbeitbar. Damit erübrigt sich deine Frage. Stell hier deine Frage, wenn es relevant ist wird es von den Moderatoren in die FAQ übertragen.
bis bald
akari
-
M.E. können registrierte User auch in der FAQ posten.
Nur wird die ja von kaum jemandem gelesen (;)), so dass eine direkt dort gestellte (Nach)Frage wohl untergehen würde. Deshalb, wie von akari gesagt, hier im Hauptforum nachfragen.
-
Hallo
Also ich als Mod darf z.B. im MFC-Forum nichts in die FAQ schreiben. Deshalb dürften auch andere normale Benutzer nicht in unsere BCB-FAQ schreiben.
bis bald
akari
-
Ok. Dann habe ich wohl den "Antworten"-Button etwas überinterpretiert.
Vielen Dank bisher!
-
Nein hast Du nicht... Aber wenn Du tatsächlich draufklickst, bekommst Du folgenden Meldung:
Nur Moderatoren haben die Berechtigung, in diesem Forum auf Beiträge zu antworten.
-
Hmm ja, habe ich das etwa mit dem "eigenen FAQ-Beitrag editieren" verwechselt!?