![]() |
2. Form schliessen Variable=Nil
Hallo,
ich glaube heute ist es zu warm.... oder ich sehe den Wald vor Bäumen nicht usw... daher brauche ich kurz Hilfe.... Szenario bisher: Form_1 erstellt zur Laufzeit eine Form_2 und zwar modal. Schön und gut. Saubere Sache.
Delphi-Quellcode:
unit1:
... Form2:=Tform.Create(nil); try Form2.ShowModal; finally FreeAndNil(Form2); end; ... Szenario jetzt: Die Form2 soll nicht mehr modal sein, kann aber jederzeit selber geschlossen oder erstellt werden oder Inhalte ändern sich oder wird bei Programmende einfach mit geschlossen. Form2 darf, wenn nur einmal existieren. Mein Problem gerade. Wenn die Form2 geschlossen wird dann bekommt unit1 das nicht mit und die Variable Form2 ist noch assigned, auch wenn in Form2 unter FormClose Action:=caFree; eingestellt ist.
Delphi-Quellcode:
Wie setze ich Form2=nil wenn der Anwender das Form_2 schliesst?
unit1:
uses uForm2,... Form2:TForm2; ... procedure TForm1.btnCreateForm2Click(Sender: TObject); begin if Assigned(Form2) then <--- hier knallts beim 2. Aufruf wenn Form2 geschlossen wurde, da Form2<>Nil ist! begin ShowMessage('schon da!'); Form2.BringToFront; end else begin Form2:=TForm2.Create(nil); Form2.Show; end; end; ... procedure TForm1.DingeDieDieWeltNichtBraucht; begin ... Form2.ZeigeWasAnderes; ... end; Ich möchte aber nicht FindComponent nutzen... Danke schon mal.... |
AW: 2. Form schliessen Variable=Nil
Setze Form2 einfach in OnDestroy von TForm2 auf nil. ;-)
|
AW: 2. Form schliessen Variable=Nil
Zitat:
|
AW: 2. Form schliessen Variable=Nil
setze in OnCreate/OnDestroy eine Klassenvariable auf true/false. Die kannst du dann abfragen.
|
AW: 2. Form schliessen Variable=Nil
Hallo,
das Form2 ist in den Optionen auf verfügbar eingestellt? Bis bald Chemiker |
AW: 2. Form schliessen Variable=Nil
Zitat:
Habe das jetzt so gelöst...
Delphi-Quellcode:
unit1;
.. type TForm1 = class(TForm) btnCreate: TButton; btnTest: TButton; procedure FormDestroy(Sender: TObject); procedure btnCreateClick(Sender: TObject); procedure btntestClick(Sender: TObject); private { Private-Deklarationen } Form2:TForm2; public { Public-Deklarationen } end; .. procedure TForm1.FormDestroy(Sender: TObject); begin Form2.free; end; procedure TForm1.btnCreateClick(Sender: TObject); begin if Assigned(Form2) then begin Form2.BringToFront; end else begin Form2 := TForm2.Create(nil); Form2.PFree := @Form2; Form2.Show; end; end; //////////////////////////////////////////////////////// unit2; .. type TForm2 = class(TForm) procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure FormDestroy(Sender: TObject); procedure FormCreate(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } PFree: ^TForm; // Adresse von end; .. procedure TForm2.FormCreate(Sender: TObject); begin PFree:=nil; end; procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction); begin Action:=caFree; end; procedure TForm2.FormDestroy(Sender: TObject); begin if Assigned(PFree) then begin PFree^:=nil; end; end; |
AW: 2. Form schliessen Variable=Nil
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
Aber eine andere Frage: Wozu zerstörst du das Formular eigentlich immer wieder? Es reicht doch, es bei der ersten Verwendung zu erstellen und danach einfach sichtbar oder unsichtbar zu machen. |
AW: 2. Form schliessen Variable=Nil
Na ja, wenn ich es schon dynamisch erstelle, dann auch richtig. Ansonsten kann ich in den Projektoptionen ja auch einstellen, dass es gleich erzeugt werden soll. Aber warum den Speicher unnütz belasten, wenn es nicht gebraucht wird?
|
AW: 2. Form schliessen Variable=Nil
Zitat:
Bei mir stehen die Formulare in den Optionen auf verfügbar! Zitat:
|
AW: 2. Form schliessen Variable=Nil
Hallo ipg,
reicht es nicht das Form2 statt mit From2.free einfach mit FreeAndNil(Form2) freizugeben? Bis bald Chemiker |
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:15 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 by Thomas Breitkreuz