2009-07-01 11 views
9

J'ai un contrôle utilisateur personnalisé sur mes formulaires Windows. Ce contrôle a quelques étiquettes dessus.Contrôle utilisateur Cliquez sur - Windows Forms

Je vais afficher dynamiquement un tableau de ces contrôles sur mon formulaire qui contiendra différents bits de données.

Ce que j'essaie de faire est de savoir quel contrôle utilisateur a été sélectionné lorsque je clique dessus.

Cela fonctionne lorsque je clique sur un espace vide sur le contrôle utilisateur, cependant, si je clique sur n'importe quelle étiquette sur le contrôle utilisateur, il ne reconnaîtra pas le clic de contrôle de l'utilisateur.

Des réflexions sur la façon dont je peux effectuer un clic de contrôle utilisateur complet, même si un libellé sur le contrôle est en cours de clic?

Si cette question n'est pas claire, ou si vous avez besoin de plus d'informations, veuillez laisser un commentaire.

Je le fais en C#.

Merci!

Répondre

11

L'événement de clic du contrôle utilisateur ne se déclenche pas lorsqu'un autre contrôle est cliqué sur le contrôle utilisateur. Vous devez lier manuellement l'événement click de chaque élément. Vous pouvez le faire avec une simple boucle sur behind du contrôle de l'utilisateur:

foreach (Control control in Controls) 
{ 
    // I am assuming MyUserControl_Click handles the click event of the user control. 
    control.Click += MyUserControl_Click; 
} 

Après ce morceau de code workd, MyUserControl_Click se déclenche lorsque aucun contrôle sur le contrôle de l'utilisateur clique dessus.

+0

génial! cela a totalement aidé. Merci beaucoup! – CodeLikeBeaker

+1

Merci! Veuillez noter que vous devez inclure un ajout/suppression récursif pour les contrôles qui se trouvent dans les contrôles (par exemple les contrôles dans un panneau) –

+0

N'oubliez pas non plus de vérifier les types d'objet dans votre méthode d'événement: public void MyUserControl_Click (Expéditeur d'objet) , EventArgs e) {if (sender.GetType() est Label) {...}} '. Sinon, vous pourriez facilement rencontrer des problèmes. – libjup

0
foreach (Control c in this.Controls) 
    { 
     c.Click += new EventHandler(SameAsForm_Click); 
    } 

Gardez à l'esprit que ce ne sera pas ajouter des étiquettes de clickevents dans les boîtes de groupe, panneaux, etc au -EventHandler « SameAsForm_Click ».

Questions connexes