Précédent   Forum du club des développeurs et IT Pro > Dotnet > Développement Windows > Windows Forms
Windows Forms Forum d'entraide sur le développement Windows Forms & Applications Windows. Avant de poster -> Articles Windows Forms
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 28/12/2012, 19h57   #1
olibara
Membre Expert
 
Mangeur de gauffre
Inscription : octobre 2007
Messages : 4 137
Détails du profil
Informations professionnelles :
Activité : Mangeur de gauffre

Informations forums :
Inscription : octobre 2007
Messages : 4 137
Points : 2 232
Points : 2 232
Par défaut Quitter l'application au démarrage

Bonjour

Je suis confronté a un probleme que je n'avais curieusement jamais experimenté

Je souhaite munir mon application d'un Login
Donc je me dis que le plus simple c'est d'ouvrir une form dialogue dans le constructeur de la Form Principale et, le cas échéant, faire un Application.Exit() a la sortie du dialogue :
Ca ne marche pas : la form principale finit toujours par etre affichée ?

Tant pis me dis-je : je mets le Dialogue dans le Form.Load

C'est un peu plus efficace mais si je ne prends pas soin de mettre le Dialogue a la FIN du Load, j'ai quand meme un fantome de la form principale qui apparait !

Quelqu'un peut-il m'expliquer ce comportement et peut-etre me suggerer la meilleure maniere de faire ?

Merci de votre aide
__________________
« Ils ne savaient pas que c'était impossible, alors ils l'ont fait ». (Twain)
olibara est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/12/2012, 23h30   #2
sisqo60
Membre Expert
 
Avatar de sisqo60
 
Homme
Consultant informatique
Inscription : février 2006
Messages : 731
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Indre et Loire (Centre)

Informations professionnelles :
Activité : Consultant informatique

Informations forums :
Inscription : février 2006
Messages : 731
Points : 1 150
Points : 1 150
Bonsoir,

Si j'étais toi, je ferais ça dans le main. J'ai vu beaucoup de dévs qui n'osaient pas toucher au program.cs sois disant que c'était du code généré par VS, mais non.

Bref, un truc du genre :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
 
        static void Main(string[] args)
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            /*
             * Récupération des arguments, exemple login et mot de passe
             */
            string login = "login en paramètre";
            string password = "mot de passe en paramètre";
            //et tu eux éviter d'ouvrir le fenêtre de login si le login et password sont OK...
 
            using (FormLogin frmlogin = new FormLogin())
            {
                //Dialogresult peut-être OK, ou ce que tu veux...
                if (frmlogin.ShowDialog() == DialogResult.Yes)
                {
                    Application.Run(new MainForm());
                }
            }
        }
Bon dév...
__________________
Un âne se croit savant parce qu'on le charge de livres (proverbe américain)

N'oubliez pas de avant de
Pas de question techniques par MP, c'est contre la philosophie du forum
sisqo60 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/12/2012, 08h05   #3
olibara
Membre Expert
 
Mangeur de gauffre
Inscription : octobre 2007
Messages : 4 137
Détails du profil
Informations professionnelles :
Activité : Mangeur de gauffre

Informations forums :
Inscription : octobre 2007
Messages : 4 137
Points : 2 232
Points : 2 232
Merci sisqo60

Oui tu as sans doute raison
C'est effectivement plus "propre" que de lancer mon dialogue dans la form principale
Mais le comportement que j'ai rencontré etait un peu interpellant !
__________________
« Ils ne savaient pas que c'était impossible, alors ils l'ont fait ». (Twain)
olibara est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/12/2012, 17h03   #4
sisqo60
Membre Expert
 
Avatar de sisqo60
 
Homme
Consultant informatique
Inscription : février 2006
Messages : 731
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Indre et Loire (Centre)

Informations professionnelles :
Activité : Consultant informatique

Informations forums :
Inscription : février 2006
Messages : 731
Points : 1 150
Points : 1 150
Bonsoir,

Oui, je crois que j'ai zappé une partie de ta question, mais c'est pas surprenant, dans le constructeur, tu ne peux pas appeler le destructeur de l'objet... ça me parait assez logique. L'évènement form_load se produit lorsque le formulaire s'affiche donc, oui c'est normal qu'on voit ton formulaire par derrière.

j'ai été vite dans ma réponse, mais c'est pas anormal.
__________________
Un âne se croit savant parce qu'on le charge de livres (proverbe américain)

N'oubliez pas de avant de
Pas de question techniques par MP, c'est contre la philosophie du forum
sisqo60 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/01/2013, 15h44   #5
sinople
Membre Expert
 
Homme Marco Guignard
Ingénieur développement logiciels
Inscription : avril 2009
Messages : 728
Détails du profil
Informations personnelles :
Nom : Homme Marco Guignard
Âge : 30
Localisation : Suisse

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : Finance

Informations forums :
Inscription : avril 2009
Messages : 728
Points : 1 379
Points : 1 379
Envoyer un message via MSN à sinople
La solution de sisqo60 est la plus propre. Elle te permet aussi d'avoir une application qui survit sans formulaire mais avec un icone dans la zone de notification de windows par exemple.

Par contre du coup il n'est plus possible d'utiliser le code auto-généré par les propriété du projet de visual studio concernant l'infrastucture de l'application (Le formulaire ou tu choisis le formulaire de démarage, si l'application est à instance unique, etc.).

Autrement le test dans l'évenement load est aussi une solution acceptable. Tu peux très bien réduire la fenêtre dans la barre des tâches avant la boite de dialogue (ne pas oublier de la remonter ensuite) afin d'éviter le formulaire blanc phantome.

Si tu veux mettre le test dans le sub New, c'est possible aussi. Il faut alors utiliser une variable drapeau (boolean) selon le résultat de l'opération. Il ne reste plus qu'à tester cette variable sur le load et de fermer le formulaire si besoin. Il est aussi possible de lançer une exception dans le constructeur, ce qui évitera la création de l'objet et provoquera un crash monumental de ton application. C'est pas propre du tout mais ça doit marcher...
sinople est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 11h02.


 
 
 
 
Partenaires

Hébergement Web