Feststellen ob eine Instanz einer Form bereits geöffnet

16. November 2005 13:31

Hallo,

ich möchte eine Form mit run also nicht modal öffnen. Allerdings möchte ich nur eine Instanz dieser Form geöffnet haben.

Meine bisherigen Versuche über eine Variable des Types Form auf die Eigenschaften zuzugreifen liefen schief.

Hat jemand eine Idee, wie ich ermitteln kann ob eine Form bereits geöffnet ist?

16. November 2005 13:43

Spontan fällt mir die Möglichkeit ein, eine SingleInstance-Codeunit zu erstellen, welche dann "anwendungsglobale" Variablen speichert.

Die Form ruft dann im OnOpenForm-Trigger ApplicationGlobals.SetForm4711Opened(TRUE) und im OnClose-Trigger ApplicationGlobals.SetForm4711Opened(FALSE) auf.

Der Programmcode, welcher die Form öffnen will, fragt mit ApplicationGlobals.IsForm4711Opened ab, ob die Form schon offen ist.

Jetzt bleibt nur noch die Frage zu klären, wie man die bereits geöffnete Form in den Vordergrund holt, wenn sie ein weiteres Mal geöffnet werden soll.


Wird die Form jedoch über die Navigation Pane geöffnet, so bietet Navision 4.0 schon ein hauseigenes Mittelchen an:
Mit der rechten Maustaste auf die Überschrift der Navigation Pane (also ganz oben) klicken -> Navigationsbereich-Optionen... -> Häkchen bei "Offene und neue Aktionen vertauschen" entfernen.
Nun wechselt Navision immer zu der bereits geöffneten Form, anstatt eine neue zu öffnen.
Mit [Strg] + Klick kann trotzdem eine neue Instanz der Form geöffnet werden.
Ist das Häkchen gesetzt, dann ist das Verhalten (wie der Titel schon sagt) vertauscht und Navision öffnet immer ein neues Fenster, es sei denn, man hält beim Klick [Strg] gedrückt.

16. November 2005 15:16

Erstmal Danke für die prompte Anwort.

Es funktioneirt auch.

Nun das nächste Problem:
Wie kann ich diese FORM von "außen" wieder schließen. Ich habe wohl keine Kontrolle über das Fenster sofern dieses mit RUN gestartet wurde.

16. November 2005 20:55

Nun wie wäre es mit einem Timer auf der Form welcher einen Wert aus der Codeunit abfragt?

Oder ein OCX auf dem Form das mit einem aus der CU in Verbindung steht, dann sollte es mit Events ohne timer gehen.