statische Komponente direkt aus Komponente löschen
-
Hi,
ich habe in meiner Form eine Button und versuche nun folgendes:
void __fastcall TForm1::Button5Click(TObject *Sender)
{
delete Button5;
}Der Button geht weg, aber es kommt immer eine Fehlermeldung. Wieso? Wie kann ich es machen das es geht?
Dieses Beispiel macht kein Sinn ich weiß. Ich habe mir eine eigene Komponente geschrieben, die ich von TPanel abgeleitet habe. Diese Komponente hat ein Fenster Style mit einem Kreuz um das Fenster zu löschen. Und dort rufe will ich ja auch die Komponente von der Komponente aus löschen.
Wer hat eine Idee?
Timo
-
hallo,
du musst von der klasse her aus denken. in deiner kompo wäre dies etwa:
delete this;
in dem von dir genannten beispiel würde daraus:
delete this->Button1;
weisst du was ich meine???
mfg
murphy
-
hi nochmal,
halt, ich habe scheisse herausgeschwätzt, weiss jeztz was du meinst
melde mich nochmal... sorry.mfg
murphy
-
Timo,
Du kannst keinen Button löschen, während Du Dich in einer seiner eigenen Ereignis-Methoden befindest.
Das ist so, als würdest Du den Ast absägen, auf dem Du sitzt.
-
hallo,
ok timo, das ganze ist problematisch weil es sich in den schwantz beisst, aber es gibt dennoch eine möglichkeit. habe es getestet und es läuft prima:
//Die Header-Datei. class TForm1 : public TForm { __published: // Von der IDE verwaltete Komponenten private: TButton* MyButton; public: __fastcall TForm1(TComponent* Owner); void __fastcall MyButtonClick(TObject* Sender); void __fastcall DeleteMyButton(TMessage& Msg); BEGIN_MESSAGE_MAP VCL_MESSAGE_HANDLER(29456, TMessage, DeleteMyButton) END_MESSAGE_MAP(TForm); }; //Die Cpp. __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { MyButton = new TButton(this); MyButton->Parent = this; MyButton->OnClick = MyButtonClick; } //--------------------------------------------------------------------------- void __fastcall TForm1::DeleteMyButton(TMessage& Msg) { delete (TObject*)Msg.LParam; } void __fastcall TForm1::MyButtonClick(TObject* Sender) { PostMessage(Handle, 29456, 0, (long)Sender); }
es wird quasi im konstruktor der form dynamisch ein button erzeugt, parent zugewiesen und einen OnClick event-handler. das eigentliche enternen übernimmt deletemybutton die von mybuttonclick eine botschaft erhält. es ist wichtig das diese botschaft über postmessage und nicht über sendmessage übermittelt wird, da postmessage nicht auf die ausführung wartet.
bei einer statisch erzeugten komponente (also per form-editor) ist das löschen per
delete this->MyButton;
möglich ohne problem.
mfg
murphy