2011-05-05 5 views
1

J'ai construit un composant personnalisé qui contient essentiellement une zone d'image et une étiquette. Dans le formulaire parent, je veux être capable de détecter quand on a cliqué dessus. L'événement standard .click ne semble pas fonctionner, mais je n'ai jamais utilisé d'événements auparavant, je ne suis donc pas certain de les utiliser correctement. Heres le code que je utilise (dans le parent) pour essayer de faire reconnaître le clic:Composant personnalisé sur événement Click

Item aItem = new Item(); 
aItem.Icon = ItemImage; 
aItem.Title = Title; 
aItem.Click += new EventHandler(ItemClicked); 
aItem.Filename = File; 

et Heres la méthode de son appel:

public void ItemClicked(Object sender, EventArgs e) 
{ 
    MessageBox.Show("Item Clicked!"); 
} 

Ce code ne se déclenche. Ai-je besoin de mettre quelque chose dans le composant ou est-ce que je fais juste ce mal?

Vive

+0

qu'en est-il de mouseLeftButtonDown au lieu de cliquer? –

+0

Êtes-vous en cliquant sur un contrôle contenu dans votre contrôle personnalisé? –

+0

De quelle classe de base êtes-vous issu? – seairth

Répondre

2

À droite, j'ai finalement travaillé. La réponse de Tejs m'a encore plus embrouillé, alors voici ce que j'ai fait.

Dans mon UserControl j'ai eu l'événement suivant:

public event EventHandler Clicked;

J'ai eu un événement lorsque l'image a été cliqué (toujours dans le UserControl) et je viens d'appeler l'événement clicked:

private void imgItem_Click(object sender, EventArgs e) 
{ 
    Clicked(this, e); 
} 

Puis, dans ma forme mère, quand je crée l'objet, j'ai eu les éléments suivants:

Item aItem = new Item(); 
aItem.Clicked += new EventHandler(ItemClicked); 

void ItemClicked(object sender, EventArgs e) 
{ 
    MessageBox.Show("Clicked!"); 
} 
1

Vous devez faire cela en exposant un event « :

Votre composant personnalisé:

// A custom delegate like MyItemClickedHandler, or you could make a Func<> or Action<> 
public event MyItemClickedHandler ItemClickedEvent; 

public void ItemClicked(object sender, EventArgs e) 
{ 
    if(ItemClickedEvent != null) 
     ItemClickedEvent(); // Your delegate could pass parameters if needed 
} 

Ensuite, votre formulaire parent observe simplement l'événement:

myCustomControl.ItemClickedEvent += new MyItemClickedHandler(SomeMethod); 

Ensuite, chaque fois que l'événement est levé sur votre contrôle personnalisé, Le parent est averti parce qu'il a souscrit à l'événement.