![]() |
Sender.free?
hallo zusammen
ist es möglich sobald auf einen Button gedrückt wurde ihn damit zu löschen? ist ja klar das es so nicht geht:
Delphi-Quellcode:
aber hat jemand ne Idee?
onclick(sender:TObject)
begin sender.free; end; |
Re: Sender.free?
Bei mir geht das...
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin (Sender as TButton).Free; end; |
Re: Sender.free?
welche delphi version hast du?
bei mir kommt "abstract error" |
Re: Sender.free?
Warum denn loeschen? Unsichtbar schalten sollte genuegen.
|
Re: Sender.free?
nein
folgendes: edit edit combobox button edit edit combobox button edit edit combobox button edit edit combobox button ich muss zurlaufzeit mehrere Edits, Comboboxen erstellen weil ich nicht weis wieviel der anwender braucht. diese Compos will ich mit einem button löschen. dieser button gehört quasi zu diesen compos. sobald also der button gedrückt wurde will ich den mit löschen |
Re: Sender.free?
Den Sender eines Events löschen? Damit bekommst Du mit fast 100%iger Sicherheit in Teufels Küche.
Was wird nun passieren, wenn das Event abgearbeitet wird und das Programm zum Aufrufer zurückspringt und dort noch etwas mit dem Control gemacht wird - Es sollte krachen. Beim Click-Event evtl. nicht (oder nur sporatisch). |
Re: Sender.free?
Zitat:
|
Re: Sender.free?
Moin!
Also bei mir funktioniert in einem recht kleinen Projekt auch ein Sender.Free - weil, warum sollte ich noch ein TypeCast machen? Ich weiss doch nicht unbedingt welche Klasse dahinter steckt, ausserdem werden die Destruktoren nicht umsonst überschrieben und er ruft eh immer den Destruktor der Instanz in Sender auf. Aber: Das Problem bei der Vorgehensweise ist einzig und allein, dass der Button ja der Aufrufer des Ereignisses ist und wenn man ihn in diesem freigibt, dann kehrt die Programmausführung zurück in einen Speicherbereich der nicht mehr benutzt wird. Die Programmausführung kehrt halt zum Button zurück, der existiert aber nicht mehr und es knallt. Daher: Entweder das ganze entkoppeln oder einfach mit Visible arbeiten wie vorgeschlagen... (Warum es in kleinen Projekten geht: Der freigegebene Speicher wird nicht überschrieben da in einer kleinen Anwendung nicht ständig für irgendwas noch viel Speicher gebraucht wird und daher steht beim Rücksprung bzw. Rückkehr von dem Ereignis zu Button immer noch der alte Code an der Stelle...) MFG Muetze1 |
Re: Sender.free?
Aus der Hilfe:
Zitat:
Sehe ich auch so. Kannst dem Button natürlich auch in seinem OnClick einen Kenner verpassen, der eine andere Routine des Programms veranlasst, aufzuräumen und den Button freizugeben. Die Eigenschaft Tag kann man z.B. gut dafür (für den Kenner) nehmen. |
Re: Sender.free?
schade ich dachte ich kann das mit einer procedure machen schade wieder arbeit :wink:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:42 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz