Le meilleur moyen d'accéder à un contrôle sur une autre forme dans les Windows Forms?

Tout d'abord, c'est une question à propos d'une application de bureau à l'aide de Windows Forms, pas un ASP.NET question.

J'ai besoin d'interagir avec les contrôles sur d'autres formes. Je suis en train d'accéder à des contrôles à l'aide, par exemple, la suite...

otherForm.Controls["nameOfControl"].Visible = false;

Il ne fonctionne pas de la façon dont je voudrais attendre. Je me retrouve avec une exception générée à partir de Main. Cependant, si je fais les contrôles public au lieu de private, je peux alors accéder directement à eux, comme si...

otherForm.nameOfControl.Visible = false;

Mais est-ce la meilleure façon de le faire? Est de rendre le contrôle public sur l'autre forme considérés comme des "meilleures pratiques"? Est-il un "meilleur" moyen de contrôles d'accès sur une autre forme?

Plus D'Explications:

C'est en fait une sorte de suite d'une autre question que j'avais posée, La meilleure méthode pour la création d'un “arbre des préférences de la boîte de dialogue” type de l'interface en C#?. La réponse que j'ai eu était grand et résolu de nombreux, de nombreux problèmes d'organisation j'ai eu en termes de maintien de la droite de l'INTERFACE utilisateur et facile à travailler à la fois dans le temps et au moment de la conception. Cependant, il a apporté cette tatillonne question de facilement contrôler d'autres aspects de l'interface.

En gros, j'ai une racine qui instancie beaucoup d'autres formes qui sont assis à une table ronde sur la racine. Ainsi, par exemple, un bouton radio sur l'un de ces sous-formulaires pourriez avoir besoin de modifier l'état d'une barre d'état icône sur l'essentiel, la forme de base. Dans ce cas, j'ai besoin d'un sous-formulaire à parler à la commande dans la barre d'état de la société mère (racine) de la forme. (J'espère qu'un sens, pas dans un "à qui la" sorte de façon.)

  • Êtes-vous accès à ces contrôles de l'extérieur par un thread séparé?
  • Assurez-vous de mettre cela dans sa propre classe, qui prend forme dans le constructeur. Elle doit implémenter l'interface IDisposable et les biens aliénés lorsque vous avez terminé. Il doit également utiliser le suivi de référence (augmentation/diminution d'un nombre entier de manière récursive en l'appelant ne cause pas de problèmes) et seulement de cacher les contrôles lors de cette passe de 0 à 1. Et seulement de les montrer à nouveau quand il passe de 1 à 0.