Application.Run(Form)
lance une boucle de messages sur le fil d'exécution actuel et affiche le formulaire spécifié. La boucle de messages permet au formulaire de recevoir des messages Windows (par exemple, des pressions sur les touches, des clics de souris, des invalidations de peinture) pour lui permettre d'apparaître réactif et d'avoir une interaction avec l'utilisateur. Lorsque vous appelez ShowDialog()
sur un Form
il fait en fait une chose similaire et crée une boucle de message modale pour le formulaire sur lequel ShowDialog
a été appelé.
Il n'y a pas beaucoup de différence entre les deux appels. Application.Run
ajoute un traitement supplémentaire des événements qui vous permet de faire le ménage dans les ressources lorsque le formulaire principal est fermé (cf. Application.ThreadExit ).
La façon recommandée de démarrer les applications WinForms est d'utiliser la méthode suivante Application.Run
mais je pense qu'il s'agit plus d'une convention que d'une règle. La principale raison d'utiliser Application.Run
c'est si vous voulez ouvrir plusieurs formulaires non modaux. Vous pouvez le faire en utilisant :
new Form().Show();
new Form().Show();
Application.Run();
Vous ne pourriez pas y parvenir en utilisant le ShowDialog()
car l'un des formulaires devrait être modal.
Pour ce qui est de votre question, à savoir comment afficher un formulaire de connexion puis le formulaire principal si la connexion est réussie, je pense que ce que vous avez est parfait :
if (new LoginForm().ShowDialog() == DialogResult.OK)
{
Application.Run(new MainForm());
}
L'alternative est de faire la plomberie vous-même et d'ouvrir une instance de MainForm
dans l'événement de clôture de la LoginForm
si la connexion a réussi.