2010-02-11 6 views
0

mon projet est écrit en C#. J'ai un contrôle d'utilisateur que j'ai conçu. Dans ce contrôle, je veux pouvoir regarder à travers le formulaire où le contrôle est placé en utilisant la réflexion pour regarder tous les autres contrôles sur le formulaire.Réflexion dans un UserControl pour examiner le formulaire contenant. C#

Comment puis-je faire cela? J'ai utilisé la réflexion pour passer par dll, mais pas pour quelque chose comme ça.

en résumé: Mon usercontrol est placé sur un formulaire, je veux que mon usercontrol à onLoad regarde à travers tous les autres contrôles sur le formulaire (parfois je vais vouloir le limiter au même conteneur et non forme entière mais je peux comprendre plus tard).

Je suis également ouvert aux idées qui n'utilisent pas la réflexion si quelqu'un en a.

merci!

EDIT:

Alors j'ai essayé de regarder simplement à travers les contrôles parents et que le travail na pas pour ce que im essayant de faire, ce qui est de ma faute pour expliquer mal au-dessus. Permettez-moi de donner plus de détails.

Je sais que sur le formulaire principal, il y aura un contrôle ContainerListView, maintenant lorsque vous ajoutez des colonnes à containerlistview ContainerListviewColumnHeaders sont créés. Leurs déclarations apparaissent dans initalizeComponent() pour le formulaire. Ce que je veux faire est dans mon usercontrol Je veux regarder le formulaire et trouver tous les ContainerListViewColumnHeader, mais comme ils ne sont pas de type 'Control' (ils sont 'Component'), ils n'apparaissent pas dans la méthode précédente. L'interrogation de Containerlistview n'est pas une option.

+0

Pourriez-vous simplement récupérer le formulaire parent via la propriété 'Parent' (vous devrez peut-être vous abonner à l'événement' ParentChanged'), puis accéder à la collection 'Controls' de ce formulaire? – stakx

+0

Concernant les informations supplémentaires que vous donnez dans votre édition: AFAIK, un formulaire n'a pas nécessairement de références à tous les composants qui y sont ajoutés dans le Concepteur de formulaires. Certains composants sont initialisés avec une référence au formulaire, mais pas l'inverse. – stakx

+0

Donc, en utilisant l'approche fournie par Reed, je pense que vous pouvez trouver ce contrôle ContainerListView qui aura très probablement une propriété comme "Columns" et chaque colonne aura quelque chose comme "Header". Juste une supposition. –

Répondre

5

Pas besoin de réflexion.

Regardez simplement UserControl.ParentForm - il s'agit du formulaire qui héberge UserControl. De là, vous pouvez itérer (récursivement) à travers Form.Controls.

+0

+1 ... me battre de quelques secondes. –

+0

Edited ma description pour donner plus d'informations –

Questions connexes