none
empecher un efenetre de souviri plusieurs fois RRS feed

  • Question

  • Bonjour,

    j 'airealiser un petit programme avec une oage principale portant des menus

    seulement voila si vous cliquez plusieurs fois sur le menu consultation il vous ouvrira autant de formaulaire de consultation

    comment procéder?

    Cordialement


    Marcelle NGOUNOU
    mardi 8 février 2011 10:32

Réponses

  • Bonjour,

    Et oui le bloc note n'est pas très pratique pour faire du dev, voici mon code corrigé :

     Form FConsultationBR = null; 
     
     //Recherche du formulaire dans les fenêtres ouvertes
     foreach (Form UneForm in this.MdiChildren)
     {
      if (UneForm.GetType() == typeof(FormConsulatationBR))
      {
       UneFiche.WindowState = FormWindowState.Normal;
       UneFiche.Activate();
       FConsultationBR = UneForm;
       break;
      }
     }
    
     if(FConsultationBR == null)
     {
      //La fenêtre n'est pas ouverte on la créée
      FConsultationBR = new FormConsulatationBR();
      FConsultationBR.MdiParent = this;
      FConsultationBR.Dock = DockStyle.Fill;
      FConsultationBR.Show();
     }
     else
     {
      //La fenêtre est ouverte on la place au premier plan
      FConsultationBR.WindowState = FormWindowState.Normal;
      FConsultationBRUneFiche.Activate();
     }
    
    
    Cordialement
    
    • Marqué comme réponse marclas jeudi 10 février 2011 09:49
    jeudi 10 février 2011 08:59

Toutes les réponses

  • Bonjour,

    une façon simple est de garder une référence au formulaire de consultation accessible depuis le menu

    - si la référence est null, le formulaire n'a jamais été ouvert

    - si la référence est différente de null, vous placez le formulaire au premier plan.

    Cordialement

    mardi 8 février 2011 12:46
    Modérateur
  • Merci nikho,

     

    et je procede comment pour garder cette reference??

     

    cordialement


    Marcelle NGOUNOU
    mardi 8 février 2011 14:43
  • Bonjour,

    Si vous utilisez une Form MdiContainer, vous pouvez faire un control sur les fenêtres contenues dans la page principale (en utilisant la propriété MdiChildren).

    Cordialement

    mardi 8 février 2011 16:46
  • Pouvez vous essayer de nous envoyer un exemple de code qui reproduit votre problème, il sera plus facile de vous aider.

    Cordialement.

    mardi 8 février 2011 17:20
    Modérateur
  • bonjour nikho,

     

    voila le code que j utilise pour mes formualires

     

               FormConsulatationBR FConsultationBR = new FormConsulatationBR();

                FConsultationBR.MdiParent = this;
                FConsultationBR.Dock = DockStyle.Fill;
                FConsultationBR.Show();

    merci


    Marcelle NGOUNOU
    mercredi 9 février 2011 07:22
  • Bonjour,

    en utilisant une variable privée sur votre Form MDI

    private FConsultationBR fConsultationBR = null;
    
    //...
    
    if (this.fConsultationBR == null)
    {
        this.fConsultationBR = new FConsultationBR();
        this.fConsultationBR.MdiParent = this;
        this.fConsultationBR.Dock = DockStyle.Fill;
        this.fConsultationBR.Show();
    }
    

    ou comme effectivement via MdiChildren et Linq un simple test pour voir si MdiChildren contient une form du type FConsultationBR

    if (this.MdiChildren.OfType<FConsultationBR>().Count() == 0)
    {
        ...
    }
    

    Cordialement

    mercredi 9 février 2011 13:17
    Modérateur
  • Bonjour,

    Le problème en utilisant une variable privée, c'est qu'elle ne sera pas remise à nulle lorsque vous la fermerez.

    Je vous conseille le code suivant :

      Form FConsultationBR = null;  
      
      //Recherche du formulaire dans les fenêtres ouvertes
      foreach (Form UneForm in this.MdiChildren)
      {
       if (UneForm.GetType() == FormConsulatationBR)
       {
         UneFiche.WindowState = FormWindowState.Normal;
         UneFiche.Activate();
         FConsultationBR = UneForm;
         break;
       }
      }
    
      if(FConsultationBR == null)
      {
       //La fenêtre n'est pas ouverte on la créée
       FConsultationBR = new FormConsulatationBR();
       FConsultationBR.MdiParent = this;
       FConsultationBR.Dock = DockStyle.Fill;
       FConsultationBR.Show();
      }
      else
      {
       //La fenêtre est ouverte on la place au premier plan
       FConsultationBR.WindowState = FormWindowState.Normal;
       FConsultationBRUneFiche.Activate();
      }
    
    Cordialement
    mercredi 9 février 2011 17:04
  • Bonjour Atmeitsatme

    Merci pour ton explication; mis j ai quelques erreurs lors de l'execution

    voila mon code

                Form FConsultationBR = null;

                //Recherche du formulaire dans les fenêtres ouvertes
                foreach (Form UneForm in this.MdiChildren)
                {
                    if (UneForm.GetType() == FormConsultationBR ) // erreur ici Message Error    'Fichier_Reception_control.FormConsultationBR' is a 'type' but is used like a 'variable'   
                    {
                        UneForm.WindowState = FormWindowState.Normal;
                        UneForm.Activate();
                        FConsultationBR = UneForm;
                        break;
                    }
                }

                if (FConsultationBR == null)
                {
                    //La fenêtre n'est pas ouverte on la créée
                    FConsultationBR = new FormConsultationBR();
                    FConsultationBR.MdiParent = this;
                    FConsultationBR.Dock = DockStyle.Fill;
                    FConsultationBR.Show();
                }
                else
                {
                    //La fenêtre est ouverte on la place au premier plan
                    FConsultationBR.WindowState = FormWindowState.Normal;
                    FConsultationBR.Activate();
                }

     

    cordialment


    Marcelle NGOUNOU
    jeudi 10 février 2011 08:09
  • bonjour Atmeitsatme

     

    finalement voila la correction que j ai porté ca marche mais je voudrais savoir si c'est la bonne solution

    Form FConsultationBR = null;

                //Recherche du formulaire dans les fenêtres ouvertes
                foreach (Form UneForm in this.MdiChildren)
                {
                    if (UneForm.Name == "FormConsulatationBR"  )
                    {
                        UneForm.WindowState = FormWindowState.Normal;
                        UneForm.Activate();
                        FConsultationBR = UneForm;
                        break;
                    }
                }

                if (FConsultationBR == null)
                {
                    //La fenêtre n'est pas ouverte on la créée
                    FConsultationBR = new FormConsultationBR();
                    FConsultationBR.MdiParent = this;
                    FConsultationBR.Dock = DockStyle.Fill;
                    FConsultationBR.Show();
                }
                else
                {
                    //La fenêtre est ouverte on la place au premier plan
                    FConsultationBR.WindowState = FormWindowState.Normal;
                    FConsultationBR.Activate();
                }


    Marcelle NGOUNOU
    jeudi 10 février 2011 08:30
  • Bonjour,

    Et oui le bloc note n'est pas très pratique pour faire du dev, voici mon code corrigé :

     Form FConsultationBR = null; 
     
     //Recherche du formulaire dans les fenêtres ouvertes
     foreach (Form UneForm in this.MdiChildren)
     {
      if (UneForm.GetType() == typeof(FormConsulatationBR))
      {
       UneFiche.WindowState = FormWindowState.Normal;
       UneFiche.Activate();
       FConsultationBR = UneForm;
       break;
      }
     }
    
     if(FConsultationBR == null)
     {
      //La fenêtre n'est pas ouverte on la créée
      FConsultationBR = new FormConsulatationBR();
      FConsultationBR.MdiParent = this;
      FConsultationBR.Dock = DockStyle.Fill;
      FConsultationBR.Show();
     }
     else
     {
      //La fenêtre est ouverte on la place au premier plan
      FConsultationBR.WindowState = FormWindowState.Normal;
      FConsultationBRUneFiche.Activate();
     }
    
    
    Cordialement
    
    • Marqué comme réponse marclas jeudi 10 février 2011 09:49
    jeudi 10 février 2011 08:59
  • Merci Atmeitsatme

    c'est ok

     

    cordialement

     


    Marcelle NGOUNOU
    jeudi 10 février 2011 09:49