2009-02-24 9 views
4

Je pense que c'est quelque chose que Google devrait être capable de résoudre pour moi très bien, mais je trouve peu ou pas d'exemples que je comprends vraiment.Comment donner un contrôle personnalisé ASP.Net un nouvel événement personnalisé

J'ai ce contrôle personnalisé appelé UserControlTask. Je souhaite ajouter un événement OnHide et comme son nom l'indique, je veux qu'il soit lancé lorsque le contrôle de l'utilisateur est caché.

Il semble que je trouve beaucoup d'exemples d'événements prioritaires comme OnClick, mais aucun où un événement totalement nouveau est ajouté.

Tout ce que je sais vraiment est que je dois déclarer ... EventHandler

public event EventHandler Hide; 

Alors je crois ajouter le OnHide aux attributs dans ma méthode CreateChildControls. Je pense que c'est exact de toute façon. Au-delà, je ne sais rien.

Répondre

7

Votre problème n'ajoute l'événement (ce qui est facile:

public event EventHandler Hide; 

// this is the function that raises the event 
private void OnHide() { 
    if (Hide != null) 
     Hide(this, new EventArgs()); 
} 

Votre problème est de savoir quand appeler OnHide() (qui déclenche l'événement) - car il n'y a aucun moyen de savoir quand les peaux d'utilisateur le contrôle (je suppose que vous parlez de quelque chose qui se passe du côté client), il n'y a pas de temps dans lequel vous devez soulever cet événement.

+0

Ok, alors pourquoi pas? J'ai appris que le contrôle dont il hérite a un OnHide. Si je l'ai ajouté au contrôle comme vous l'avez montré ici, puis-je envoyer l'événement du contrôle hérité du contrôle dérivé? – Carter

+1

Dans ce cas, remplacez simplement la méthode OnHide. – Bryan

+0

Si la base a une méthode * virtuelle * OnHide, remplacez-la simplement et votre méthode sera appelée à la place (assurez-vous d'appeler base.OnHide dans votre implémentation). Si la méthode n'est pas virtuelle, vous pourriez peut-être découvrir ce qu'elle fait dans OnLoad (Reflector peut vous aider) et voir ce que vous pouvez faire pour y remédier. – configurator

0

Vous pouvez mélanger les méthodes qui déclenchent les événements et les événements eux-mêmes.

Control.OnClick est une méthode qui déclenche l'événement Control.Click. Dans les sous-classes surchargeant OnClick (et appelant base.OnClick) permet le traitement sans avoir besoin de passer par un gestionnaire. D'autre part, un contrôle qui compose doit utiliser l'événement directement.

0

Deux choses simples

vraiment. la première chose à faire dans votre le contrôle personnalisé déclare un événement o bjet:

public event System.EventHandler EmployeeSelected; 

Puis, de là, dans votre code que vous désirez augmenter l'événement avec, vous effectuez les opérations suivantes:

protected void btnSelectEmployee_Click(object sender, EventArgs e) 
{   
    if (!string.IsNullOrEmpty(txtSearchEmployeeId.Text)) 
    { 
     EmployeeSelected(this, new EventArgs()); 
    }  
} 

Ensuite, dans votre classe principale d'appel, vous consommer l'événement et processus comme requis.

Vous pouvez également ajouter des éléments supplémentaires si vous souhaitez également transmettre des arguments d'événement.

Note: J'ai ajouté du code depuis ma propre application. Je pensais que ce serait assez facile pour vous d'extrapoler à votre propre application.

0

Ceci est juste un addon à la solution. Comment résoudre ce problème dans VB. Ajoutez ce qui suit au contrôle;

Delegate Sub OnCompleted() 

Public Event Completed As OnCompleted 

Déclenchez l'événement dans le contrôle en cas de besoin

RaiseEvent Completed() 

Puis dans la page parent, vous pouvez cacth cet événement comme celui-ci

<asp:somecontrol OnCompleted="SomeControl_OnCompleted"... 

qui est ensuite traitée dans le code derrière comme cette

Protected Sub SomeControl_OnCompleted() Handles SomeControl.Completed 

facile peazy, assurez-vous simplement que votre gestionnaire d'événements est le même que votre déclaration de délégué.

Questions connexes