Application.Run(Form)
Startet eine Nachrichtenschleife für den aktuellen Thread und zeigt das angegebene Formular an. Die Nachrichtenschleife ermöglicht es dem Formular, Windows-Nachrichten zu empfangen (z. B. Tastendruck, Mausklicks, Ungültigmachungen beim Malen), damit es reaktionsschnell erscheint und mit dem Benutzer interagiert. Wenn Sie ShowDialog()
eine Form
Instanz aufrufen , funktioniert dies ähnlich und es wird eine modale Nachrichtenschleife für das Formular erstellt, auf dem ShowDialog
aufgerufen wurde.
Es gibt keinen großen Unterschied zwischen den beiden Anrufen. Application.Run
Fügt eine zusätzliche Ereignisbehandlung hinzu, mit der Sie Ressourcen aufräumen können, wenn das Hauptformular geschlossen wird (siehe Application.ThreadExit ).
Die empfohlene Methode zum Starten von WinForms-Anwendungen ist die Verwendung Application.Run
, aber ich vermute, dass dies eher eine Konvention als eine Regel ist. Der Hauptgrund für die Verwendung Application.Run
ist, wenn Sie mehrere nicht modale Formulare öffnen möchten. Sie können dies tun mit:
new Form().Show();
new Form().Show();
Application.Run();
Sie konnten dies mit der ShowDialog()
Methode nicht erreichen , da eine der Formen modal sein müsste.
Was Ihre Frage betrifft, wie ein Anmeldeformular und dann das Hauptformular angezeigt werden soll, wenn die Anmeldung erfolgreich ist, denke ich, dass das, was Sie haben, in Ordnung ist:
if (new LoginForm().ShowDialog() == DialogResult.OK)
{
Application.Run(new MainForm());
}
Die Alternative besteht darin, die Installation selbst durchzuführen und eine Instanz von MainForm
im Abschlussereignis zu öffnen, LoginForm
wenn die Anmeldung erfolgreich war.
Von MSDN:
http://msdn.microsoft.com/en-us/library/ms157902.aspx
quelle
Bei meinen Tests habe ich diesen Hauptunterschied festgestellt:
Wenn Application.Run verwendet wird, gibt die Schaltfläche Schließen (rotes X) des Formulars DialogResult.None zurück. Wenn jedoch ShowDialog verwendet wird, erzeugt die Schaltfläche Schließen DialogResult.Cancel.
Ist dir das wichtig? In meinem Code habe ich auf DialogResult.Cancel getestet, um den Exit-Code meiner Anwendung zu ermitteln. Das war kaputt, als das rote X zum Schließen des Formulars verwendet wurde. Ich teste jetzt auf DialogResult.OK, um einen erfolgreichen Exit anzuzeigen.
return myForm.DialogResult == DialogResult.OK ? 0 : 1;
quelle
Ein wesentlicher Unterschied besteht darin, dass ShowDialog normalerweise ein modaler Dialog ist. Wenn Sie ein benutzerfreundliches Toolset erstellen möchten, möchten Sie nicht, dass es aus modalen Dialogfeldern besteht.
Außerdem akzeptiert Application.Run () mehr als nur ein Formular. Es hat ein paar Überlastungen.
Was Ihre Bewerbung betrifft, denke ich nicht, dass es wichtig ist. Application.Run ist für mich sinnvoll, da es den Start Ihrer eigentlichen Anwendung kennzeichnet.
quelle
Die Dokumentation der Überlastung
public static void Run( ApplicationContext context );
hat ein ordentliches Beispiel mit einem anderen Ansatz, der auch zwei Formen umfasst.
quelle
Für ein konkreteres Beispiel eines Unterschieds:
Wenn es sich bei Ihrem Hauptformular um ein MDI-Formular handelt, unterscheidet sich das Verhalten beim Klicken auf die Schaltfläche zum Schließen (das 'x' oben rechts oder Alt-F4) je nachdem, mit welcher Methode Sie das Formular anzeigen.
Wenn
Application.Run(mainForm)
das Abschlussereignis der untergeordneten Formulare ausgeführt wird, wird das Abschlussereignis des Hauptformulars ausgeführt.Mit
mainForm.ShowDialog
wird das Abschlussereignis des Hauptformulars ausgeführt, und das Abschlussereignis der untergeordneten Formulare wird nicht ausgeführt.quelle
Application.Run()
ist für den Start der Anwendung vorgesehen, während sieMainForm
Teil der Anwendung ist undMainForm()).ShowDialog()
nur zur Anzeige verwendet wird.Application.Run()
ist dasentry point
für Ihre Bewerbung. Die gleicheMain()
Methode gilt für eine Klasse oderApplicationStart()
eine WebanwendungApplication.Run () hat verschiedene Überladungen, von denen eine ohne Parameter ist. Diese Methode startet die Anwendung ohne ein erstes Formular.
quelle
Bei meinen Tests habe ich festgestellt, dass die Verwendung von Application.Run-Schaltflächen mit DialogResult das Formular nicht schließt (OnFormClosing wird nicht getroffen), verglichen mit ShowDialog, bei dem die Schaltflächen mit DialogResult OnFormClosing treffen und das Formular schließen.
quelle