none
Niveau de protection RRS feed

  • Question

  • Bonjour,

    Je suis sous VS 2010 FR

    J'ai créé un page MDI, dans celle-ci, une barre d’outils

    Voici le code :

    private void Btn_Mnu_Courants_Click(object sender, EventArgs e)
    {
           Btn_Mnu_Courants.BackColor = Color.AliceBlue;
           Frm_Courants Frm = new Frm_Courants();
           Frm.MdiParent = this;
           //Frm.Text = "Fenêtre " + Frm ++;
           Frm.Show();
    }

    Mais dans ma feuille fille, j'ai une erreur, voici l'erreur

    Ce que je veux faire, c'est remettre la couleur de fond au bouton, qui a été cliquer auparavant.

    Comme ceci :

       private void Pic_Quitter_Normaux_Click(object sender, EventArgs e)
          {
            Mdi_Frm_StampsCob Mdi = new Mdi_Frm_StampsCob
            Mdi.Btn_Mnu_Courants.BackColor =Mdi.Btn_Mnu.BackColor;
            this.Close();
          }

    Je ne sais pas ce qui ne vas pas, a l'aide SVP

    Cordialement

    Salva


    • Modifié sa56 lundi 28 novembre 2011 10:31
    lundi 28 novembre 2011 09:09

Réponses

  • Vous cherchez à modifier la couleur d'un bouton de votre fenêtre MDI depuis votre fenêtre fille. Par défaut, vous ne pouvez pas accéder au bouton Btn_Mnu_Courants car celui-ci est privé.

    Une solution simple mais non recommandé est de changer la visibilité et de mettre votre bouton public : vous pouvez effectuer cette modification dans les propriétés du bouton Btn_Mnu_Courants.

    Il serait cependant préférable de créer une méthode public (RefreshColor() dans mon exemple ) sur votre fenêtre mère qui mettrait à jour la couleur de ses propres boutons et de l'appeler depuis votre fenêtre fille :

    ((Mdi_Frm_StampsCob)this.MdiParent).RefreshColor();
    

    Cordialement

     

    lundi 28 novembre 2011 13:25
    Modérateur
  • Bonjour,

    dans l'évènement Pic_Quitter_Normaux_Click  de votre fenêtre fille, vous créez une nouvelle instance de fenêtre Mdi_Frm_StampsCob.Vous ne devez pas créez une nouvelle instance mais référencer la fenêtre existante via this.MdiParent ce qui revient à utiliser le code déjà indiqué :

    ((Mdi_Frm_StampsCob)this.MdiParent).RefreshColor();
    
    

    Cordialement

    mercredi 30 novembre 2011 09:17
    Modérateur

Toutes les réponses

  • Bonjour,

     pouvez vous préciser ce que vous souhaitez faire et quelle est votre erreur. A priori avec votre code le bouton aura la couleur AliceBlue.

    Vous souhaitez remettre les autres boutons à leur couleur d'origine, il vous faut parcourir les éléments de votre menu. Pour vous aider précisement il faudrait que vous précisiez la structure de votre menu.

    Si on considère un menu avec 2 ToolStripItem (Bouton1, Bouton2 ) dans votre menu (menuStrip1) , vous affecter la couleur par défaut à tous les items à l'exception de l'item sur lequel vous cliquez.

    private void Bouton1_Click(object sender, EventArgs e)
    {
      this.SetColor((ToolStripItem)sender);
    }
    
    private void Bouton2_Click(object sender, EventArgs e)
    {
      this.SetColor((ToolStripItem)sender);
    }
    
    private void SetColor(ToolStripItem item)
    {
      item.BackColor = Color.Aqua;
    
      foreach (ToolStripItem t in this.menuStrip1.Items)
      {
        if (t != item)
        {
          t.BackColor = Color.Chocolate;
        }
      }
    }
    
    
    Cordialement

    lundi 28 novembre 2011 10:01
    Modérateur
  • Bonjour,

    Merci de votre intervention.

    Je n'ai pas vu que ma question était a moitie !!!!

    J'ai complète

    Cordialement

    Salva

    lundi 28 novembre 2011 10:32
  • Vous cherchez à modifier la couleur d'un bouton de votre fenêtre MDI depuis votre fenêtre fille. Par défaut, vous ne pouvez pas accéder au bouton Btn_Mnu_Courants car celui-ci est privé.

    Une solution simple mais non recommandé est de changer la visibilité et de mettre votre bouton public : vous pouvez effectuer cette modification dans les propriétés du bouton Btn_Mnu_Courants.

    Il serait cependant préférable de créer une méthode public (RefreshColor() dans mon exemple ) sur votre fenêtre mère qui mettrait à jour la couleur de ses propres boutons et de l'appeler depuis votre fenêtre fille :

    ((Mdi_Frm_StampsCob)this.MdiParent).RefreshColor();
    

    Cordialement

     

    lundi 28 novembre 2011 13:25
    Modérateur
  • Bonjour,

    J’essaie de mettre en pratique ce que vous m'avez conseillé.

    Voilà le code de la feuille MDI

    private void Btn_Mnu_Courants_Click(object sender, EventArgs e)
    {
        RefreshColor(Btn_Mnu_Courants, Color.Azure);
        Frm_Courants Frm = new Frm_Courants();
        Frm.MdiParent = this;
        Frm.Show();
    }

    public void RefreshColor (ToolStripButton Btn, Color Couleur)
    {
        Btn.BackColor = Couleur;
    }

    Et celui de la feuille fille

    private void Pic_Quitter_Normaux_Click(object sender, EventArgs e)
    {
        Mdi_Frm_StampsCob Mdi = new Mdi_Frm_StampsCob();
        Mdi.RefreshColor(Mdi.Btn_Mnu_Courants, Color.Brown);
        Close();
    }

    La compilation se fait correctement, seulement la couleur de fond du bouton ne change pas.

    A l'aide SVP

    Merci

    Cordialement

    Salva

    mardi 29 novembre 2011 07:00
  • Bonjour,

    dans l'évènement Pic_Quitter_Normaux_Click  de votre fenêtre fille, vous créez une nouvelle instance de fenêtre Mdi_Frm_StampsCob.Vous ne devez pas créez une nouvelle instance mais référencer la fenêtre existante via this.MdiParent ce qui revient à utiliser le code déjà indiqué :

    ((Mdi_Frm_StampsCob)this.MdiParent).RefreshColor();
    
    

    Cordialement

    mercredi 30 novembre 2011 09:17
    Modérateur
  • Bonjour, c'est bien ca. Merci encore Corialement Salva
    • Marqué comme réponse sa56 mercredi 30 novembre 2011 10:42
    • Non marqué comme réponse nikhoModerator mercredi 30 novembre 2011 17:53
    mercredi 30 novembre 2011 10:42