Ereignis einer dyn. Komponente zuweisen
-
Hallo,
ich habe einen TButton zur Laufzeit erzeugt:
void Button(AnsiString c){ TButton *pB = new TButton(Application); pB->Parent = Form1; pB->Caption = c; pB->OnClick = Button1Click; }in den FAQ habe ich gelesen mit dem Ereignis zuweisen über "Button1Click".
Ich habe auch einen Stat. Button1 dem ein Ereignis zugewiesen wurde.
Wenn ich das Programm aber starte bekomme die Fehlermeldung[C++ Fehler] Unit1.cpp(66): E2451 Undefiniertes Symbol 'Button1Click'
Wie kann ich nun diesem dyn. erzeugten Button das Ereignis von Button1 zuweisen?
Ein klick auf Button1 löst das Ereignis ohne Probleme aus
Danke für eure Hilfe
Noli
-
Hallo
[C++ Fehler] Unit1.cpp(66): E2451 Undefiniertes Symbol 'Button1Click'
Die fehlermeldung besagt eindeutig das es keine Methode namens Button1Click gibt.
Entweder legst du eine solche noch an (schlecht), oder du legt eine mit einem passenden treffenden Namen an, und änderst die Zuweisung des Events entsprechend.bis bald
akari
-
Im konkreten Fall dürfte das Problem wohl darin liegen, dass void Button(AnsiString c) nicht als Form-Member deklariert ist und deshalb *(FormXY::)*Button1Click nicht kennen kann.
-
Hallo Jansen,
Jansen schrieb:
Im konkreten Fall dürfte das Problem wohl darin liegen, dass [i]void Button(AnsiString c) nicht als Form-Member deklariert ist und deshalb [i](FormXY:: )Button1Click nicht kennen kann.
kannst Du mir das bitte etwas näher erklären

Grüße Noli
-
Jansen schrieb:
Im konkreten Fall dürfte das Problem wohl darin liegen, dass void Button(AnsiString c) nicht als Form-Member deklariert ist und deshalb *(FormXY::)*Button1Click nicht kennen kann.
Nein, dann wäre die Fehlermeldung anders.
Wenn er versucht, dem Event eine reine Funktion ohne Klassenzugehörigkeit zuzuweisen, dann kommt die FehlermeldungKonvertierung von 'void (_fastcall *)(TObject *)' nach 'void (_fastcall * (_closure )(TObject *))(TObject *)' nicht möglich
Wenn er vergessen hat, die Implementation der Methode mit einem TForm1:: zu kennzeichnen, kommt die Fehlermeldung
Unresolved external '__fastcall TForm1::Button1Click(System::TObject *)' referenced from D:\...\UNIT1.OBJ
Die Fehlermeldung
Undefiniertes Symbol 'Button1Click'
kommt ausschließlich, wenn es überhaupt keine derartige Methode an dieser Stelle deklariert ist. Also muß erstmal eine erschaffen werden, oder bei einem Schreibfehler die entsprechende Methode umbenannt werden
bis bald
akari
-
akari schrieb:
Nein, dann wäre die Fehlermeldung anders.
Nein, wäre sie nicht.

Standardprojekt, Button drauf und OnClick erzeugen, Header unverändert.
// ... //--------------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { // } //--------------------------------------------------------------------------- void test() { TButton *btn = new TButton(Form1); btn->OnClick = Button1Click; // ... }Ergibt beim Compilieren genau den beschriebenen E2451.
Das hier funzt:
Header: //... void __fastcall test(); //... Unit: //... void __fastcall TForm1::test() { TButton *btn = new TButton(Form1); btn->OnClick = Button1Click; // ... }Oder die die erste Variante, aber mit
btn->OnClick = Form1->Button1Click;
-
Danke

Ich hab es gerafft, denke ich mal

Bei mir funzt es auchGrüße Noli