Comment puis-je fermer un formulaire de connexion et afficher le formulaire principal sans ma demande de clôture?
J'ai deux formulaires dans mon projet (le Login et le Principal).
Ce que je suis en train de accoomplish est, si la connexion est réussie, je dois montrer le formulaire Principal et fermez le formulaire de Connexion.
J'ai cette méthode dans le formulaire de Connexion qui ferme le formulaire de Connexion lorsque la connexion est réussie. Mais la Principale forme ne montre pas.
public void ShowMain()
{
if(auth()) //a method that returns true when the user exists.
{
var main = new Main();
main.Show();
this.Close();
}
else
{
MessageBox.Show("Invalid login details.");
}
}
J'ai essayé de cacher le formulaire de Connexion si le processus de connexion est réussie. Mais ça me dérange parce que je sais bien que mon programme est en cours d'exécution le formulaire de connexion est toujours là, elle devrait être fermée à droite?
Ce que devrait être la bonne méthode pour cela?
Merci...
- essayez d'appeler cette.Close() à la fin et non comme première opération
- de même, l'ensemble de l'application se ferme.
- vous pouvez essayer , principal.ShowDialog(); au lieu de la principale.Show();. il devrait fonctionner correctement. depuis ShowDialog est formulaire non modal.
Vous devez vous connecter pour publier un commentaire.
La raison de votre formulaire principal n'est pas de montrer, c'est parce que une fois que vous fermez le formulaire de connexion, votre message l'application de la pompe est à l'arrêt, ce qui provoque la totalité de la demande pour quitter. Le Windows boucle de message est lié au formulaire de connexion, car c'est celui que vous avez défini comme le formulaire de démarrage dans votre projet de propriétés. Regardez dans votre Programme".cs" du fichier, et vous verrez le responsable bits de code:
Application.Run(new LoginForm())
. Consultez la documentation de la méthode ici sur MSDN, ce qui explique cela plus en détail.La meilleure solution est de déplacer le code de votre formulaire de connexion dans le "Programme.cs de fichier". Lorsque votre programme démarre pour la première fois, vous allez créer et afficher le formulaire de connexion comme une boîte de dialogue modale (qui s'exécute sur un autre message en boucle et bloque l'exécution du reste de votre code jusqu'à ce qu'elle se ferme). Lorsque la boîte de dialogue de connexion se ferme, vous pourrez vérifier sa
DialogResult
propriété pour voir si la connexion a réussi. Si elle l'est, vous pouvez commencer la principale forme à l'aide deApplication.Run
(créant ainsi le principal message boucle); sinon, vous pouvez quitter l'application sans montrer une quelconque forme. Quelque chose comme ceci:Je voudrais faire l'inverse.
Dans l'événement OnLoad de votre formulaire Principal afficher le formulaire d'ouverture de session en tant que boîte de dialogue. Si la boîte de dialogue résultat est OK, alors autoriser la main pour continuer le chargement, si le résultat est un échec d'authentification alors abandonner le charger et afficher la boîte de message.
MODIFIER exemple de Code(s)
Une autre solution serait d'afficher la LogonForm de la méthode Principale dans le programme.cs, quelque chose comme ceci:
Dans cet exemple, votre LogonForm aurait pour exposer une LogonSuccessful bool propriété est définie sur true si l'utilisateur a entré des informations d'identification valides
C'est simple.
Voici le code.
C'est ma solution. Créer ApplicationContext pour définir mainform de la demande et de changement mainform lorsque vous voulez ouvrir un nouveau formulaire et fermer la forme actuelle.
Programme.cs
Lorsque la connexion est terminée.
J'espère que cela va vous aider.
Voici une solution simple, votre problème, c'est que l'ensemble de votre application se ferme lorsque votre formulaire de connexion se ferme à droite? Si oui, alors aller à vos projets propriétés et dans l'Onglet modifier le mode d'arrêt pour "Lors de la dernière formulaire se ferme" de cette façon, vous pouvez utiliser Moi.fermer sans fermer l'ensemble du programme
C'est la solution la plus élégante.
😉
Je pense que une bien meilleure méthode est de le faire dans le Programme.cs fichier où vous avez généralement de l'Application.Exécuter(form1), de cette façon, vous obtenez un nettoyant approche, formulaire de Connexion n'a pas besoin d'être couplée à la forme Principale, il vous suffit d'afficher le nom de connexion et si elle retourne true permet d'afficher le formulaire principal sinon l'erreur.
Essayez ceci:
Vous devez appeler la nouvelle forme dans un diferent fil de l'appartement, si j'ai pas de mal, à cause de l'appel système de windows API et interfaces COM.
Un conseil: ce système est élevé d'insécurité, parce que vous pouvez changer si la condition (MSIL) et il "les enfants du jeu" de passer sur votre sécurité. Vous avez besoin d'un système plus solide pour la sécurité de votre logiciel comme obscurcir ou de connexion à distance ou quelque chose comme ça.
Espère que cette aide.
ShowMain
méthode jamais appelé? Pourquoi avez-vous besoin de créer un nouveau thread à tous?vous devez le faire dans l'autre sens:
Charge de la
mainform
première et dans saonload
spectacle événement de votreloginform
avecshowdialog()
qui permettra d'évitermainform
de montrer jusqu'à avoir un résultat à partir de laloginform
MODIFIER:
Comme c'est un connexion et si vous n'avez pas besoin de toutes les variables à partir de votre
mainform
(qui est un mauvais design, dans la pratique,), vous devriez vraiment mettre en œuvre dans votre programme.cs Davide et Cody suggéré.meilleure façon de montrer la connexion et fermer le formulaire de connexion avant la connexion avec succès formulaire de connexion dans FrmMain après InitializeComponent.
Evan le post est trop vieux je tiens à vous donner une astuce pour le faire si tu veut montrer splash/écran de connexion et lorsque la barre de progression de l'écran d'accueil à obtenir la valeur/ou la connexion réussie arriver et fermé le splash/login puis re afficher le formulaire principal, frm-principales seront le formulaire de démarrage pas frm-spalash
en frm-main
dans le frm-Splash
si vous l'utiliser pour le formulaire de connexion
noter que j'utilise un minuterie et un barre de progression de manipuler les actions que vous n'avez pas besoin de ces deux, juste pour le plaisir de réponse complète seulement, espérons que cette aide
essayer cette
et lorsque vous quittez l'Application, vous pouvez utiliser