2010-09-08 5 views
1

J'ai un contrôle personnalisé que nous appellerons "TheGrid".Événement personnalisé sur le contrôle personnalisé

Dans les contrôles de TheGrid est un autre contrôle que nous appellerons "GridMenu". GridMenu a un contrôle de bouton dans sa propre collection de contrôle.

Je voudrais permettre au développeur en utilisant cette commande pour associer une méthode de niveau avec onclick de ce bouton au fond GridMenu ala:

<customcontrols:TheGrid id="tehGridz" runat="server" onGridMenuButtonClick="mypagemethod" /> 

Répondre

4

Sur le GridMenu (que je suppose est un autre contrôle personnalisé), exposer l'événement ButtonClick en déclarant comme public:

public event EventHandler ButtonClick; 

Si vous le souhaitez, vous pouvez créer un gestionnaire d'événements personnalisé en définissant un délégué et une classe d'arguments d'événement personnalisée. Quelque part dans la logique de ce contrôle, vous devrez augmenter l'événement (peut-être dans les gestionnaires d'événements Clicked contenus dans GridMenu, les événements peuvent être cascadés). Codage en C#, vous devrez vérifier que l'événement n'est pas nul (ce qui signifie qu'au moins un gestionnaire est attaché) avant de déclencher l'événement.

Maintenant, cet événement est visible par TheGrid, qui contient votre GridMenu. Maintenant, vous devez créer un "pass-through" pour permettre aux utilisateurs de TheGrid de joindre des gestionnaires sans avoir à connaître GridMenu. Vous pouvez le faire en spécifiant un événement sur TheGrid qui ressemble à une propriété, et se fixe et se détache des gestionnaires de l'événement intérieur:

public event EventHandler GridMenuButtonClick 
{ 
    add{ GridMenu.ButtonClick += value;} 
    remove { GridMenu.ButtonClick -= value;} 
} 

De la marge bénéficiaire d'un contrôle contenant un contrôle TheGrid, vous pouvez spécifier le gestionnaire d'événements en l'attachant à OnGridMenuButtonClicked comme vous le vouliez.

+0

J'avais supposé quelque chose comme ceci était l'approche à prendre mais peu importe ce que je fais je ne peux pas obtenir l'intellisence pour reconnaître OnGridMenuButtonClicked. –

+0

@ D.Forrest: Vous devez utiliser GridMenuButtonClick au lieu de OnGridMenuButtonClicked – SKINDER

+0

Bien sûr, j'ai compris cela. J'appelle en fait mon événement "OnSearchClick". Mais il n'est définitivement pas visible via le balisage et les points d'arrêt dans le débogage sur les déclarations d'ajout/suppression ne sont pas touchés. –

Questions connexes