2009-10-20 6 views
0

(lol)Modification de la BackColor de mon UserControl personnalisé - aide!

J'ai un panel sur Form1. Je vais ajouter plusieurs instances de mon contrôle personnalisé MovieItem à ce panneau.

Pour ce faire, je vais:

panel1.Controls.Add(objMovieItem); 

Maintenant, dans le code de MovieItem.cs J'ajoute les événements .cliquer de tout à l'intérieur du UserControl de sorte que chaque fois qu'un utilisateur clique PARTOUT dans mon UserControl , c'est les changements de couleur de fond.

Voici le problème:

J'ai environ 10 instances du UserControl sur Form1 (intérieur du Panel1 bien sûr). Comment est-ce que je peux mettre le BackColor de l'sélectionné à lightblue, et tous les autres à la couleur par défaut?

Voici mon code:

private void SearchMovie() 
{ 
    //All this does is create an instance of the UserControl and add it to Panel1. 
    MovieItem NewMovie = new MovieItem(); 
    NewMovie.SearchMovie(txtSearch.Text); 
    panel1.Controls.Add(NewMovie); 
} 

Maintenant, à l'intérieur de mon code contrôles utilisateur:

private void MovieItem_Click(object sender, EventArgs e) 
    {    
     MainSearchForm MainFormObject = new MainSearchForm(); 

     foreach (Control y in MainFormObject.Controls["panel1"].Controls) 
     { 
      if (y is UserControl) 
      { 
       if (y is MovieItem) 
       {       
        y.BackColor = Color.White; 
       }      
      } 
     } 

     this.BackColor = Color.LightBlue; 
    } 

Voilà ce qui se passe. Les événements de clic sont 100% OK. Fonctionne comme prévu. Lorsque je clique sur un objet de mon UserControl, il change de couleur correctement. Mais l'autre ne revient pas au défaut. Qu'est-ce que je fais mal.

Merci SO.

Répondre

2

Dans le gestionnaire, vous créez un nouveau objet MainSearchForm, puis définissez ses contrôles à blanc, donc vous n'êtes pas ayant une incidence sur la forme que vous affichez.

Utilisez this.Parent pour trouver le panneau parent ou utilisez une variable statique pour contenir une référence à votre mainForm (ou etc.).

comme dans:

private void MovieItem_Click(object sender, EventArgs e) 
{ 
    foreach (Control y in this.Parent.Controls) 
    { 
     if (y is MovieItem && y != this) 
      y.BackColor = Color.White; 
    } 
    this.BackColor = Color.LightBlue; 
} 
+0

Je pense que vous avez tort ici. (Corrigez-moi si je suis) Si cela fonctionne à changer la couleur bleue en utilisant le mot-clé NEW, devrait-il fonctionner à peu près la même chose pour mon problème ici? –

+0

Le nouveau mot-clé crée un nouvel objet - ce n'est pas le formulaire que vous utilisez "in", c'est un tout autre. La boucle tente ensuite de définir des valeurs dans le nouvel objet et lorsque le gestionnaire d'événements se ferme, le nouvel objet est rejeté. Voir ma modification pour un exemple qui devrait fonctionner. –

+0

(PS Vous définissez le bleu sur this.BackColor, pas sur l'objet que vous avez créé avec de nouveaux, ce qui explique pourquoi la partie bleue fonctionne) –

Questions connexes