IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Forms Discussion :

récupérer les valeurs d'un formulaire mdi enfant


Sujet :

Windows Forms

  1. #1
    Membre régulier

    Profil pro
    Inscrit en
    Mars 2009
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 83
    Points : 89
    Points
    89
    Par défaut récupérer les valeurs d'un formulaire mdi enfant
    Bonsoir

    J'ai une application MDI. Au démarrage, un form enfant contenant un formulaire de login se charge. Dans ce form enfant, il y a un bouton valider. J'aimerais que lorsque je clique sur ce bouton valider, le mdi parent puisse récupérer les valeurs des champs login et password du form enfant pour pouvoir les traiter.

    voici mon code actuel :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    LoginForm loginForm = new LoginForm();
                loginForm.MdiParent = this;
                loginForm.Dock = DockStyle.Fill;
                loginForm.Show();
     
                string login = loginForm.Login;
                string pwd = loginForm.Password;
                currentUser = new User();
     
                if (identifyUser(login, pwd))
                {
                    Label helloLabel = new Label();
                    helloLabel.Text = String.Format("Hello {0} ! You are now connected.", currentUser);
                    helloLabel.Left = (loginForm.ClientSize.Width - helloLabel.Width) / 2;
                    helloLabel.Top = (loginForm.ClientSize.Height - helloLabel.Height) / 2;
     
                    loginForm.Controls.Clear();
                    loginForm.Controls.Add(helloLabel);
                    loginForm.Refresh();                 
                }
    Après le loginForm.show(), je pensais pouvoir récupérer les valeurs de mes champs puis modifier le contenu de ce loginForm pour afficher une phrase de bienvenue à mon utilisateur.

    Le problème c'est que lorsque je teste mon application, le loginForm se charge bien mais c'est ma phrase "Hello" qui apparait (et les variables loginForm.Login et loginForm.password sont vides). Il ne m'affiche pas les éléments du formulaire de login. C'est à dire qu'il a sauté la partie ou je peux saisir les champs login et mot de passe et cliquer sur valider.

    Vous auriez une idée d'ou vient le problème?

    Ca aurait été plus simple si j'avais pu utiliser la méthode showDialog() mais ça ne fonctionne pas avec les applications mdi :' (

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    612
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2008
    Messages : 612
    Points : 1 050
    Points
    1 050
    Par défaut
    Salut
    -----

    Vous auriez une idée d'ou vient le problème?
    Ben oui. La réponse est dans la dernière partie de ta question.

    Vu que tu n'ouvres pas la fenêtre en mode dialogue, la méthode poursuit son exécution et se termine bien avant que tu n'aies rentré les informations dans ta fenêtre fille.

    Le plus simple est quand même d'ouvrir la fenêtre fille avec showDialog. Comme ça, la méthode ne se poursuit que lorsque l'utilisateur a fermé la fenêtre de saisie du login.

    Note au passage qu'il manque le "dispose" de ta fenêtre de saisie, et qu'il serait judicieux de vérifier que l'utilisateur a confirmé ou annulé l'opération.

    Ca aurait été plus simple si j'avais pu utiliser la méthode showDialog() mais ça ne fonctionne pas avec les applications mdi
    Je ne vois pas pourquoi??? j'ai plusieurs applications MDI qui utilisent des forms ouvertes avec showDialog et ça ne pose strictement aucun problème. A mon avis tu t'es trompé quelque part.

    A+
    Claude

  3. #3
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Citation Envoyé par p1xl_01 Voir le message
    Ca aurait été plus simple si j'avais pu utiliser la méthode showDialog() mais ça ne fonctionne pas avec les applications mdi :' (
    Tu mélanges 2 choses :
    - les fenêtres enfant MDI, qui apparaissent dans la fenêtre principal en mode non modal
    - les fenêtres de dialogue, qui apparaissent toujours en mode modal, application MDI ou pas

    Dans ton cas, tu dois utiliser ShowDialog, sinon l'appel n'est pas bloquant et tu récupères les login/password avant que l'utilisateur ait pu les saisir.

  4. #4
    Membre régulier

    Profil pro
    Inscrit en
    Mars 2009
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 83
    Points : 89
    Points
    89
    Par défaut
    D'accord, j'ai bien compris que si je veux pouvoir récupérer les informations d'un formulaire il faut utiliser showDialog().

    Mais à la base, si j'ai voulu passer par la méthode show(), c'est parce que je voudrais que mon application soit composée d'une fenêtre principale avec un menu latéral composé de plusieurs boutons. Et lorsque je clique sur ces boutons, le contenu de la partie libre de cette fenêtre principale change.

    Je voudrais donc appeler des formulaires lors de l'évènement onClick() de ces boutons du menu mais je voudrais aussi que ces formulaires ne puissent ni sortir de la partie libre de la fenêtre principale (comme les enfants mdi dans une application mdi ), ni être redimensionnés.

    Je vous montre à quoi ressemble la fenêtre principale au départ:



    Peut-être que ce n'est pas la bonne solution, que je ne devrais pas utiliser une feuille mdi (sachant que dans mon application, les utilisateurs ne doivent pas pouvoir utiliser plusieurs formulaires à la fois.) Je sais que c'est un peu tordu comme fonctionnement mais je ne sais pas comment faire autrement que d'utiliser une feuille mdi :o

    En fait, concrètement, est-ce qu'il existe un moyen d'empêcher un Form appelé avec showDialog() de sortir d'une fenêtre parent? Et sinon, comment est ce que je peux remplacer l'utilisation d'un formulaire?

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    612
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2008
    Messages : 612
    Points : 1 050
    Points
    1 050
    Par défaut
    En fait, concrètement, est-ce qu'il existe un moyen d'empêcher un Form appelé avec showDialog() de sortir d'une fenêtre parent? Et sinon, comment est ce que je peux remplacer l'utilisation d'un formulaire?
    Ben, la fenêtre modale est destinée à imposer à l'utilisateur de répondre avant de poursuivre. Moyennant quoi, ça ne sert pas à grand chose de vouloir l'empêcher de sortir de la fenêtre principale, puisqu'il ne peut plus rien y faire de toutes façons. N'oublie pas non plus qu'il faut éviter de déroger au fonctionnement "normal" de Windows, sinon l'utilisateur risque de perdre ses repères et le programme devenir peu intuitif.

    Donc, à mon avis soit c'est une fenêtre modale et tu n'as pas à te préoccuper du déplacement (puisque fermeture imposée avant de poursuivre), soit au contraire tu veux que la fenêtre reste ouverte et les autres éléments de l'application (menus, outils etc) toujours accessibles. Dans ce dernier cas tu ne peux pas "attendre" dans la méthode qui ouvre la fenêtre non modale (ouverte avec Show) mais tu dois traiter l'action dans une autre méthode, méthode déclenchée lorsque l'utilisateur a confirmé son entrée (bouton) dans son formulaire.

    Pour exécuter cette méthode, deux solutions courantes : soit tu t'abonnes à un évènement public de la fenêtre fille qui s'ouvre, au moment de sa création, soit inversément c'est ta fenêtre fille qui appelle une méthode publique de ta fenêtre mère.

    Si tu veux qu'une seule fenêtre puisse être ouverte en même temps, il te suffit de te servir d'un "flag" ou toute autre solution qui t'indique avant tentative d'ouverture qu'une fenêtre fille est déjà ouverte (l'idéal est d'agir à la source en grisant le menu ou invalidant le bouton).


    A+
    Claude

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [VBA-E] Récupérer les valeurs d'un formulaire Outlook
    Par ftcalvados dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 09/08/2010, 17h27
  2. récupérer les valeurs d'un formulaire dynamique
    Par une_tite_question dans le forum Langage
    Réponses: 4
    Dernier message: 05/08/2008, 16h06
  3. Récupérer les valeurs d'un formulaire
    Par sanaa16 dans le forum Langage
    Réponses: 11
    Dernier message: 11/05/2008, 20h32
  4. servlet/jsp: récupérer les valeur d'un formulaire
    Par samia13 dans le forum Servlets/JSP
    Réponses: 3
    Dernier message: 13/04/2007, 22h46
  5. Réponses: 4
    Dernier message: 05/04/2007, 15h36

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo