Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Sender.free? (https://www.delphipraxis.net/35368-sender-free.html)

LoL 6. Dez 2004 10:24


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:
onclick(sender:TObject)
begin
  sender.free;
end;
aber hat jemand ne Idee?

Orbmu2k 6. Dez 2004 10:26

Re: Sender.free?
 
Bei mir geht das...

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
  (Sender as TButton).Free;
end;

LoL 6. Dez 2004 10:27

Re: Sender.free?
 
welche delphi version hast du?
bei mir kommt "abstract error"

Robert Marquardt 6. Dez 2004 10:32

Re: Sender.free?
 
Warum denn loeschen? Unsichtbar schalten sollte genuegen.

LoL 6. Dez 2004 10:35

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

Bernhard Geyer 6. Dez 2004 10:37

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).

LoL 6. Dez 2004 10:38

Re: Sender.free?
 
Zitat:

Zitat von Orbmu2k
Bei mir geht das...

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
  (Sender as TButton).Free;
end;

warum geht dann das überhaupt das wundert mich sowieso!

Muetze1 6. Dez 2004 10:39

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

IngoD7 6. Dez 2004 10:40

Re: Sender.free?
 
Aus der Hilfe:
Zitat:

Warnung: Sie dürfen eine Komponente nie in einer ihrer eigenen Ereignisbehandlungsroutinen oder in einer Ereignisbehandlungsroutine eines untergeordneten Objekts freigeben. Geben Sie beispielsweise auf keinen Fall eine Schaltfläche oder ihr übergeordnetes Formular in der OnClick-Ereignisbehandlungsroutine der Schaltfläche frei.
Stichwort: Unsichtbar machen sollte genügen.
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.

LoL 6. Dez 2004 10:43

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 03:09 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz