2008-08-27 11 views
1

Un certain nombre de formulaires de mon projet héritent d'un formulaire de base. Il est facile d'accéder à la collection Controls des formulaires dérivés, mais je n'ai pas trouvé un moyen simple d'accéder à la collection Components, car VS la marque comme privée. Je suppose que cela pourrait être fait avec la réflexion, mais je ne suis pas vraiment sûr de la meilleure façon de s'y prendre, n'ayant pas travaillé avec réflexion avant.Accès à un composant sur un formulaire hérité à partir du formulaire de base

Actuellement, j'utilise une sorte de solution de contournement maladroite, dans laquelle je remplace une fonction GetComponents et renvoie un tableau des composants qui m'intéresse. Ceci est évidemment sujet à des erreurs, car il est facile d'oublier de implémentez la fonction substituée ou mettez-la à jour lorsque des composants sont ajoutés.

Si quelqu'un a des conseils ou peut suggérer un meilleur moyen, je serais heureux d'entendre.

Répondre

0

Si vous craignez d'oublier de surcharger la fonction, faites-en un résumé.

1

Si vous définissez la propriété Modifiers de vos composants sur strict protected les rend accessibles sans l'utilisation d'une collection de composants.

Éditer: La découvrabilité pourrait être effectuée en utilisant la réflexion pour traverser chaque champ. Bien que cela puisse être sous-optimal dans votre cas.

0

Définissez le modificateur 'components' sur protected dans votre classe de formulaire de base. Supprimez la déclaration 'components' dans tous les formulaires dérivés.

Appeler cette méthode ci-dessous en cas de charge de la forme de base,

 public void SetComponentsStyle() 
    { 
     if (null != this.components) 
     { 
      foreach (Component comp in this.components.Components) 
      { 
       if (comp is ToolTip) 
       { 

       } 
       else if (comp is ContextMenuStrip) 
       { 

       } 
      } 
     } 
    } 
Questions connexes