![]() |
Prüfen, ob Formular existiert
Hi an alle
Eine Frage zu meiner Android app. Ich habe folgende Funktion: procedure TMainFreeF.MenuEgoF1EEditClick(Sender: TObject); var Profil: TProfilF; begin if not Assigned(Profil) then Profil := TProfilF.Create(self); Profil.Show; end; Ich garantiere jedem, dass Profil nicht existiert. Dennoch gibt Assigned(Profil) true zurück, überspringt das Create und wirft nen Fehler beim Show aus. Hab ich was übersehen ? Der Objekt-Inspector zeigt übrigens auch "kein zugewiesener Wert" bei Profil an. Danke im voraus Michael |
AW: Prüfen, ob Formular existiert
Es sollte eine Warnung kommen, dass die Variable Profil nicht initialisiert ist. Darum steht da ein quasi zufälliger Wert drin und der ist eben nicht unbedingt 0.
Weise in der ersten Zeile einmal nil zu (also vor dem if assigned). ;-) |
AW: Prüfen, ob Formular existiert
Es gibt in Delphi nur wenige Fälle, in der nicht initialisierte Variablen einen bestimmten Wert haben, z.B. zusammengesetzte lokale Variablen (z.B. Strings; Result bzw. der Funktionsname ist keine lokale Variable sondern ein impliziter out-Parameter und immer „zufällig“) sowie alle Klassenfelder.
himitsu wird uns sicher eine ausführliche Liste liefern können. |
AW: Prüfen, ob Formular existiert
Zitat:
![]() Zitat:
|
AW: Prüfen, ob Formular existiert
Zitat:
Am besten wäre es wenn man die lokale Variable in eine Feldvariable umwandelt, dann ergibt die Vorgehensweise auch wieder Sinn. Es soll ja scheinbar verhindert werden, dass das Formular mehrmals mit ".Show" angezeigt wird. |
AW: Prüfen, ob Formular existiert
Herzlichen Dank für den Input.
Was bitte ist eine Feldvariable ? Ich habe eine Android Anwendung mit ziemlich vielen Formularen. Irgendwo stand, dass es keinen Sinn mach diese zu .free'en. Dazu scheint nicht klar zu sein, ob man OnClose (cafree), DisposeOf, Free oder FreeAndNil der korrekte Weg ist. Also muss ich prüfen, ob das Formular bereits existiert. nil setzen macht tatsächlich keinen Sinn, da kenne ich ja den Status im voraus. Wenn jemand den "korrekten" Weg mir aufzeigen könnte ? Mir ist es Wurscht, ob ich die Formulare jeweils erstelle und dan leere oder ob ich auf bereits erstellte Formulare prüfen muss. Danke im voraus Michael |
AW: Prüfen, ob Formular existiert
Hallo,
Ist es denn pro Formular immer nur eine Instanz, die offen ist? Dann könntest du eine globale Formularvariable nutzen, und nicht wie in deinem Bsp eine lokale Variable. |
AW: Prüfen, ob Formular existiert
Zitat:
Delphi erstellt automatisch für jedes Formular eine globale Variable. Die sollte man für Formulare (und kaum was anderes!) auch nutzen, so wie hoika schrieb. Globalen Variablen kann man bei der Deklaration bereits initialisieren. |
AW: Prüfen, ob Formular existiert
Zitat:
Aber da in Screens auch eine Liste aller Delphi-Forms existiert, kann man dort auch problemlos nach einer bestimmten Form (Name oder Typ) suchen. |
AW: Prüfen, ob Formular existiert
Danke an alle für den wertvollen Input. Ich habe es nun dahin gelöst, dass ich die Variablen im Hauptformular deklariere und nil setze. Ist ein wenig umständlich, weil ich jetzt überall die Formular via das Mainform referenzieren muss, aber es läuft.
In diesem Sinne, schliesse ich den Thread und nochmals Dank an alle. Michael |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:49 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