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

C# Discussion :

Afficher une seule fenêtre


Sujet :

C#

  1. #1
    Membre averti

    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2007
    Messages
    177
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2007
    Messages : 177
    Points : 321
    Points
    321
    Par défaut Afficher une seule fenêtre
    J'ai un problème sous VC#2008! Je suis entrain de développez une application et je voudrais que lorsque je clique sur un bouton par exemple, il ne m'affiche qu'une seul fois le contenu de la fenêtre.

    Voila le code pour créer la fenêtre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
            private void paramètreToolStripMenuItem_Click(object sender, EventArgs e)
            {
                MKParametre MKActiveParametre = new MKParametre();
                MKActiveParametre.Show();
            }
    Si vous pouvez m'aider, je suis nouveau dans ce langage! Merci d'avance pour votre aide.

  2. #2
    Membre expert
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    2 210
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 210
    Points : 3 015
    Points
    3 015
    Par défaut
    Tu peux en dire plus sur ton problème. Le code (que tu as fourni) est celui utilisé pour afficher une fenêtre / boite de dialogue.

  3. #3
    Expert éminent Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Points : 7 903
    Points
    7 903
    Par défaut
    MKActiveParametre étant une variable locale de la procedure, une forme sera créée à chaque appel.
    Il suffit de déclarer la variable au niveau de la forme principale
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MKParametre MKActiveParametre = null
    et de la créer une seule fois dans la procedure :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (MKActiveParametre != null)  MKActiveParametre= new MKParametre();

  4. #4
    Membre averti

    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2007
    Messages
    177
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2007
    Messages : 177
    Points : 321
    Points
    321
    Par défaut Reponse pour binoo
    Citation Envoyé par binoo Voir le message
    Tu peux en dire plus sur ton problème. Le code (que tu as fourni) est celui utilisé pour afficher une fenêtre / boite de dialogue.
    Bonsoir Binoo! Ben c'est pour afficher une fenêtre que j'ai faite et que que je voudrais afficher une seule fois et qu'elle n'apparaît pas lorsque je re-clique sur ce bouton! Sauf si je referme la fenêtre.

  5. #5
    Membre averti

    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2007
    Messages
    177
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2007
    Messages : 177
    Points : 321
    Points
    321
    Par défaut Reponse pour Graffito
    Citation Envoyé par Graffito Voir le message
    MKActiveParametre étant une variable locale de la procedure, une forme sera créée à chaque appel.
    Il suffit de déclarer la variable au niveau de la forme principale
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MKParametre MKActiveParametre = null
    et de la créer une seule fois dans la procedure :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (MKActiveParametre != null)  MKActiveParametre= new MKParametre();
    Bonsoir Graffito!J'ai essayée ta méthode et il me met une erreur de type:

    Erreur 1 Une variable locale nommée 'MKActiveParametre' ne peut pas être déclarée dans cette portée, car elle modifierait la signification de 'MKActiveParametre', déjà utilisée dans une portée 'parent ou en cours' pour désigner autre chose


    et voici le code que j'ai modifié avec l'erreur en rouge:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
            private void paramètreToolStripMenuItem_Click(object sender, EventArgs e)
            {
                MKParametre MKActiveParametre = null;
                if (MKActiveParametre != null)
                {
                    MKParametre MKActiveParametre = new MKParametre();
                    MKActiveParametre.Show();
                }
            }

  6. #6
    Expert éminent Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Points : 7 903
    Points
    7 903
    Par défaut
    MKParametre MKActiveParametre = new MKParametre();
    Il ne faut pas redéclarer MKActiveParametre dans la procédure :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MKActiveParametre = new MKParametre();
    et surtout déclarer : private MKParametre MKActiveParametre =null ; en dehors de la procedure.
    ce qui donne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    private  MKParametre MKActiveParametre = null;
     
    private void paramètreToolStripMenuItem_Click(object sender, EventArgs e)
    {
       if (MKActiveParametre != null)  { MKActiveParametre = new MKParametre(); }
       MKActiveParametre.Show();
    }

  7. #7
    Membre averti

    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2007
    Messages
    177
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2007
    Messages : 177
    Points : 321
    Points
    321
    Par défaut On y est presque...


    Merci pour cet exemple Graffito! Je suis encore un débutant! Le problème est partiellement résolu! Car là il s'agit d'une histoire de pile des appels! J'essaie de regarder sur l'aide en ligne de microsoft, il me met cet exemple:

    "Dim CustomerTable As DataTable " doit être réécrit comme suit "Dim CustomerTable As New DataTable."

    Là je suis perdu!

  8. #8
    Membre expert
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    2 210
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 210
    Points : 3 015
    Points
    3 015
    Par défaut
    Il y a eu une petite erreur dans le code fourni , il faut mettre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (MKActiveParametre == null)
    En fait tu regardes si ton objet MKActiveParametre a été instancié, si ce n'est pas le cas il est null et donc tu instancies celui-ci par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MKActiveParametre = new MKParametre();

  9. #9
    Membre extrêmement actif Avatar de fally
    Homme Profil pro
    Développeur .Net / BI
    Inscrit en
    Novembre 2007
    Messages
    966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Bénin

    Informations professionnelles :
    Activité : Développeur .Net / BI

    Informations forums :
    Inscription : Novembre 2007
    Messages : 966
    Points : 1 173
    Points
    1 173
    Par défaut
    Moi je ferais ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    public object IsAlreadyOnScreen(Type t)
    {
     foreach(Form f in this.MdiChildren)
      {
      if (f.GetType() == t)
       {
       return f;
       }
      }
     return null;
    }
    et avant d'ouvrir une fenetre, je fais :
    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
    private void paramètreToolStripMenuItem_Click(object sender, EventArgs e)
    {
    try
    {
    Form f = (Form)IsAlreadyOnScreen(typeof(MKActiveParametre));
    f.BringToFront();
    return; 
    }
    catch
    {
    }
    MKAParametre MKActiveParametre= new MKParametre();
    MKActiveParametre.MdiParent = this; // ta fenetre principale doit etre MdiContainer
    MKActiveParametre.Show();
    }

  10. #10
    Membre averti

    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2007
    Messages
    177
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2007
    Messages : 177
    Points : 321
    Points
    321
    Par défaut Ca avance! Mais toujours des erreurs
    Citation Envoyé par binoo Voir le message
    Il y a eu une petite erreur dans le code fourni , il faut mettre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (MKActiveParametre == null)
    En fait tu regardes si ton objet MKActiveParametre a été instancié, si ce n'est pas le cas il est null et donc tu instancies celui-ci par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MKActiveParametre = new MKParametre();
    Merci Binoo! C'était bien ça! Il fallait mettre " == null "
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
            private MKParametre MKActiveParametre = null;
    
            private void paramètreToolStripMenuItem_Click(object sender, EventArgs e)
            {
                if (MKActiveParametre == null)
                {
                    MKActiveParametre = new MKParametre();
                }
                MKActiveParametre.Owner = this;
                MKActiveParametre.Show();
               
            }
    Mais une fois que je quitte la fenêtre, pour après la réouvrir il me met :


  11. #11
    Membre averti

    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2007
    Messages
    177
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2007
    Messages : 177
    Points : 321
    Points
    321
    Par défaut Débutant! Donc compliqué, mais essaye par lui même...
    Salut fally! Je suis un débutant dans C# et visual Studio! Donc je ne sais pas ou trop mettre le code que tu m'as fourni:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    public object IsAlreadyOnScreen(Type t)
    {
     foreach(Form f in this.MdiChildren)
      {
      if (f.GetType() == t)
       {
       return f;
       }
      }
     return null;
    }
    Donc je l'ai mis au-dessus de ceci:

    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
    private MKParametre MKActiveParametre = null;
    
    private void paramètreToolStripMenuItem_Click(object sender, EventArgs e)
    {
    try
    {
    Form f = (Form)IsAlreadyOnScreen(typeof(MKActiveParametre));
    f.BringToFront();
    return; 
    }
    catch
    {
    }
    MKParametre MKActiveParametre= new MKParametre();
    MKActiveParametre.MdiParent = this; // ta fenetre principale doit etre MdiContainer
    MKActiveParametre.Show();
    }
    Et lorsque je compile, il m'indique qu'il y a une erreur de la part de typeof:

    Erreur 1 'MKActiveParametre' est un 'champ' mais est utilisé comme un 'type'

  12. #12
    Membre extrêmement actif Avatar de fally
    Homme Profil pro
    Développeur .Net / BI
    Inscrit en
    Novembre 2007
    Messages
    966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Bénin

    Informations professionnelles :
    Activité : Développeur .Net / BI

    Informations forums :
    Inscription : Novembre 2007
    Messages : 966
    Points : 1 173
    Points
    1 173
    Par défaut
    rempalce
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Form f = (Form)IsAlreadyOnScreen(typeof(MKActiveParametre));
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Form f = (Form)IsAlreadyOnScreen(typeof(MKParametre));
    erreur de ma part

  13. #13
    Membre averti

    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2007
    Messages
    177
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2007
    Messages : 177
    Points : 321
    Points
    321
    Par défaut
    Citation Envoyé par fally Voir le message
    rempalce
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Form f = (Form)IsAlreadyOnScreen(typeof(MKActiveParametre));
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Form f = (Form)IsAlreadyOnScreen(typeof(MKParametre));
    erreur de ma part
    Merci Fally ! Ceci fonctionne très bien! Je quitte la fenêtre, elle réapparait automatiquement!

    Mais avant que je mette résolu! Je voulais savoir pourquoi la fenêtre devient gris foncée avec un genre de style 3D enfoncée???

  14. #14
    Membre extrêmement actif Avatar de fally
    Homme Profil pro
    Développeur .Net / BI
    Inscrit en
    Novembre 2007
    Messages
    966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Bénin

    Informations professionnelles :
    Activité : Développeur .Net / BI

    Informations forums :
    Inscription : Novembre 2007
    Messages : 966
    Points : 1 173
    Points
    1 173
    Par défaut
    Citation Envoyé par terminator59140 Voir le message
    Merci Fally ! Ceci fonctionne très bien! Je quitte la fenêtre, elle réapparait automatiquement!

    Mais avant que je mette résolu! Je voulais savoir pourquoi la fenêtre devient gris foncée avec un genre de style 3D enfoncée???
    j'ai pas bien compris!

  15. #15
    Membre averti

    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2007
    Messages
    177
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2007
    Messages : 177
    Points : 321
    Points
    321
    Par défaut
    Citation Envoyé par fally Voir le message
    j'ai pas bien compris!
    Ben mon application était tout a fait normal! Ben dans la Form dans l'onglet Propriété j'avais mis un BackColor "Sky Blue"! Puis comme ça ne fonctionnait pas et qu'il fallait définir la fenêtre principale comme une MDI (ce que tu m'avais mis en commentaire "//"). Donc dans l'onglet propriété de la Form, je suis allait sur Style de fenêtre et j'ai mis à true IsMdiContainer.

    J'espère t'avoir éclairé un peu!

  16. #16
    Membre extrêmement actif Avatar de fally
    Homme Profil pro
    Développeur .Net / BI
    Inscrit en
    Novembre 2007
    Messages
    966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Bénin

    Informations professionnelles :
    Activité : Développeur .Net / BI

    Informations forums :
    Inscription : Novembre 2007
    Messages : 966
    Points : 1 173
    Points
    1 173
    Par défaut
    Citation Envoyé par terminator59140 Voir le message
    Ben mon application était tout a fait normal! Ben dans la Form dans l'onglet Propriété j'avais mis un BackColor "Sky Blue"! Puis comme ça ne fonctionnait pas et qu'il fallait définir la fenêtre principale comme une MDI (ce que tu m'avais mis en commentaire "//"). Donc dans l'onglet propriété de la Form, je suis allait sur Style de fenêtre et j'ai mis à true IsMdiContainer.

    J'espère t'avoir éclairé un peu!
    J'ai remarqué que quand une fenetre est MdiContainer, on ne peut plus modifier la couleur d'arriere plan....j'ai meme eu a poster un sujet a propos mais pas de reponse depuis
    tu vas devoir faire avec alors

  17. #17
    Membre averti

    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2007
    Messages
    177
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2007
    Messages : 177
    Points : 321
    Points
    321
    Par défaut
    Citation Envoyé par fally Voir le message
    J'ai remarqué que quand une fenetre est MdiContainer, on ne peut plus modifier la couleur d'arriere plan....j'ai meme eu a poster un sujet a propos mais pas de reponse depuis
    tu vas devoir faire avec alors

    Je vais allais voir sur msdn pour voir ce que signifie MdiContainer et voir si on peux faire autrement! Car c'est monotone la couleur. Merci pour ton aide...

  18. #18
    Membre extrêmement actif Avatar de fally
    Homme Profil pro
    Développeur .Net / BI
    Inscrit en
    Novembre 2007
    Messages
    966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Bénin

    Informations professionnelles :
    Activité : Développeur .Net / BI

    Informations forums :
    Inscription : Novembre 2007
    Messages : 966
    Points : 1 173
    Points
    1 173
    Par défaut
    Tiens moi au courant!

  19. #19
    Rédacteur
    Avatar de SaumonAgile
    Homme Profil pro
    Team leader
    Inscrit en
    Avril 2007
    Messages
    4 028
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Team leader
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2007
    Messages : 4 028
    Points : 6 334
    Points
    6 334
    Par défaut
    Citation Envoyé par fally Voir le message
    Moi je ferais ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    public object IsAlreadyOnScreen(Type t)
    {
     foreach(Form f in this.MdiChildren)
      {
      if (f.GetType() == t)
       {
       return f;
       }
      }
     return null;
    }
    C'est pas mal. Tu devrais utiliser des noms de variable explicites, et tu peux remplacer le test par :
    Citation Envoyé par fally Voir le message
    et avant d'ouvrir une fenetre, je fais :
    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
    private void paramètreToolStripMenuItem_Click(object sender, EventArgs e)
    {
    try
    {
    Form f = (Form)IsAlreadyOnScreen(typeof(MKActiveParametre));
    f.BringToFront();
    return; 
    }
    catch
    {
    }
    MKAParametre MKActiveParametre= new MKParametre();
    MKActiveParametre.MdiParent = this; // ta fenetre principale doit etre MdiContainer
    MKActiveParametre.Show();
    }
    Par contre ça, c'est vraiment sale. Les exceptions ne servent pas à ça. Au lieux de mettre un try catch, il faut simplement tester si IsAlreadyOnScreen retourne null : si oui on affiche la fenêtre, sinon crée une nouvelle instance qu'on affiche.

  20. #20
    Membre extrêmement actif Avatar de fally
    Homme Profil pro
    Développeur .Net / BI
    Inscrit en
    Novembre 2007
    Messages
    966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Bénin

    Informations professionnelles :
    Activité : Développeur .Net / BI

    Informations forums :
    Inscription : Novembre 2007
    Messages : 966
    Points : 1 173
    Points
    1 173
    Par défaut
    Absolument ok avec toi mais bon un code pondu rapido est très souvent pas optimal...

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [Débutant] Afficher 2 figures dans une seule fenêtre : SUBPLOT ? Ca ne fonctionne pas.
    Par linpro.lalaland dans le forum MATLAB
    Réponses: 2
    Dernier message: 29/07/2014, 10h46
  2. Afficher une seule fenêtre dans la barre des taches
    Par Amissan dans le forum Interfaces Graphiques en Java
    Réponses: 7
    Dernier message: 25/01/2007, 16h56
  3. fermer une seule fenêtre
    Par comme de bien entendu dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 14/03/2006, 09h45
  4. [XSLT] Afficher une seule fois les attributs redondants...
    Par kobe dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 17/11/2005, 09h52
  5. Joindre 2 colonnes pour en afficher une seule
    Par major2 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 04/04/2005, 15h17

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