Implementieren Sie das Singleton-Muster
ein Beispiel: CodeProject: Einfache Singleton-Formulare (ok, es ist in VB.NET, aber einfach um dir einen Hinweis zu geben)
Wenn Sie den Dialog anzeigen, verwenden Sie einfach .ShowDialog();
anstelle von .Show();
Eine Lösung, die ich auf mein Projekt angewendet habe, um dieses Formular wieder in den Vordergrund zu bringen, ist:
%Vor%windowName ist im Wesentlichen der Klassenname Ihres Windows Forms und Rückgabewert kann verwendet werden, um keine neue Formularinstanz zu erstellen.
Wenn Ihr System die gleiche Art von Formular für verschiedene Instanzdaten anzeigen kann, können Sie ein Prüfsystem erstellen, das alle vorhandenen offenen Formulare iteriert, nach einem eindeutigen Instanzdatenidentifikator sucht und dann jedes gefundene Formular erneut anzeigt.
z.B. mit einer Formularklasse 'CustomerDetails', die eine öffentliche Eigenschaft 'CustomerUniqueID' enthält:
%Vor%Wir verwenden den gleichen Mechanismus auch, um die Aktualisierung der Datenbindung automatisch zu erzwingen, wenn die Daten eines Kunden bearbeitet und gespeichert wurden.
Probieren Sie diesen Code
aus %Vor%Beim Erstellen des Objekts für die obige Klasse 'MyClass' überprüfen Sie den Zählwert größer als 1
%Vor%Hier ist ein einfacher Weg, es zu tun.
Überprüfen Sie, ob das Formular null ist oder entsorgt wurde. Wenn das stimmt, erstellen wir eine neue Instanz des Formulars.
Ansonsten zeigen wir nur das bereits laufende Formular.
%Vor%Singletons sind nicht objektorientiert. Sie sind einfach die Objektversion von globalen Variablen. Was Sie tun können, ist, den Konstruktor der Form-Klasse als privat zu definieren, damit niemand versehentlich eine davon erstellen kann. Rufen Sie dann reflection auf, konvertieren Sie den ctor in public und stellen Sie sicher, dass Sie eine und nur eine Instanz davon erstellen.
Sie können die vorhandenen Prozesse vor dem Öffnen des Formulars überprüfen:
%Vor%Ich weiß nicht, ob die GetProcessesByName-Methode von der UAC oder anderen Sicherheitsmaßnahmen betroffen ist.