2015-12-20 6 views
0

J'ai fait un programme, qui comprend beaucoup de contrôles. Les contrôles seraient montrés et cachés selon le choix de l'utilisateur. Cela signifie que les contrôles se chevauchent les uns les autres au moment du design. Maintenant, je veux changer la couleur de fond et backcolor de tous les contrôles au moment du design. mais j'ai fondé si dur pour accomplir cette tâche, parce que tout le contrôle se chevauchant. J'ai donc décidé de faire une méthode de boucle for pour itérer les contrôles dans le formulaire et ensuite vérifier chaque contrôle à son tour s'il a des contrôles. quand le contrôle a aussi le contrôle, j'appelle la même méthode et lui passe le contrôle pour changer aussi les propriétés des sous-contrôles. La méthode est la suivante:passant l'indexeur de contrôle en référence à la méthode pour changer sa propriété

void setColor(ref Control con) 
     { 
      con.BackColor= System.Drawing.Color.Black; 
      con.ForeColor=System.Drawing.Color.Yellow; 
      if (con.Controls.Count > 0) { setColor(ref con); } 
     } 

alors mon formulaire inclut tabControl avec plusieurs pages. J'itérer les TabPages et je voulais passer à cette méthode, mais je deviens erreur « Indexer ne peut pas être passé comme hors ou paramètre ref » Je passe si: setColor(ref tabControl1.Controls[i]);

pouvez-vous s'il vous plaît me aider à résoudre ce problème ?

Répondre

0

J'ai résolu le problème. J'ai enlevé la « ref » de méthode et écrit la méthode simplement comme ce qui suit:

void SetColor(Control con) 
    { 
     con.BackColor = System.Drawing.Color.Black; 
     con.ForeColor = System.Drawing.Color.Yellow; 
     if (con.Controls.Count > 0) 
     { 
      for (int i=0; i<con.Controls.Count;i++) 
      SetColor(con.Controls[i]); 
     } 
    } 

et appeler ainsi: setColor(this.Controls[i]);