Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - Prüfen ob Formular bereits existiert
Danny87 - Di 14.02.06 13:54
Titel: Prüfen ob Formular bereits existiert
Hallo auch,
Ich erzeuge zu Laufzeit mit einem Buttonklick ein Formular.
Dieses Formular darf aber nur einmal erzeugt werden.
Ich weiss aber nicht wie ich abfragen kann, ob das Formular bereits existiert.
Ich hatte da schon eine Idee mit einer booleschen Variablen, aber das scheint mir
nicht sehr elegant.
Ich hab mir das ungefähr so vorgestellt:
Delphi-Quelltext
1: 2:
| if Form2.Existiert then Erzeuge Form2; |
gruss daniel
jaenicke - Di 14.02.06 15:17
Wenn Form2 noch nicht existiert, dann kannst du auch auf kein darin enthaltenes Element, in diesem Fall deine boolsche Variable, zugreifen...
Du bekommst dann eine Zugriffsverletzung...
So gehts...
Delphi-Quelltext
1: 2:
| if Form2 = nil then Form2 := TForm2.Create(Self); |
Solange Form2 noch nicht erzeugt wurde, ist die entsprechende Variable nil (der Pointer zeigt auf den Speicherbereich 0, wo nie zugegriffen werden darf).
Und genau das kannst du abfragen.
digi_c - Di 14.02.06 15:18
Also ich finde es akzeptabel, ansonsten (da bin ich mir aber nicht sicher) müsstest du in einer Schleife prüfen ob unter den Formularen ein Formular ist, das von dieser Formularklasse abgeleitet wurde.
chrisw - Di 14.02.06 15:21
Oder
Delphi-Quelltext
1:
| if assigned(Form2) then ..... |
Danny87 - Di 14.02.06 15:51
jaenicke hat folgendes geschrieben: |
So gehts...
Delphi-Quelltext 1: 2:
| if Form2 = nil then Form2 := TForm2.Create(Self); |
Solange Form2 noch nicht erzeugt wurde, ist die entsprechende Variable nil (der Pointer zeigt auf den Speicherbereich 0, wo nie zugegriffen werden darf).
Und genau das kannst du abfragen. |
Das wars was ich gesucht habe. Danke!
jojo-sp - Di 14.02.06 16:05
Vergiss nachher nicht das Freigeben des Forms. Entweder wenn du das Fenster verlässt, oder das ganze Programm beendest (kommt daruaf an, wo du dein Create machst).
Delphi-Quelltext
1: 2: 3: 4: 5:
| If Assigned(EigenesForm) Then Begin EigenesForm.Free; EigenesForm := nil; end; |
Danny87 - Di 14.02.06 16:07
das create hab ich anders gemacht, weil ich mit
Delphi-Quelltext
1:
| Form2 := Form2.Create(self); |
eine Fehlermeldung bekomme.
habs so gemacht:
Delphi-Quelltext
1:
| Application.CreateForm(TForm2, Form2); |
//Edit:
Im OnClose von Form2
Delphi-Quelltext
1: 2:
| Destroy; Form2 := nil; |
Es handelt sich übrigens um ein MDI-Child
mkinzler - Di 14.02.06 16:11
Zitat: |
das create hab ich anders gemacht, weil ich mit
ausblenden anzeigen Delphi-Quelltext
ausgeblendet markieren
1:
Form2 := Form2.Create(self);
eine Fehlermeldung bekomme. |
es muß auch
Form2 := TForm2.Create(self); heißen
Danny87 - Di 14.02.06 16:14
Huch!
Verdammtes T ;-)
ja, jetzt gehts....
ich sollte vllt mal genauer hinschauen :-D
Jetzt funzt auch das Free;
jojo-sp - Di 14.02.06 16:16
Du hasst ja auch ein T vergessen:
Delphi-Quelltext
1:
| Form2 := TForm2.Create(Self); |
aber die Funktion FormCreate kannte ich noch gar nicht ;-), aber wenns geht :gruebel:
digi_c - Di 14.02.06 16:48
Ahh assigned, verdammt :oops:
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!