Déclenchement d'événement dans un control utilisateur et remonté de l'événement dans la page courante

Soyez le premier à donner votre avis sur cette source.

Vue 17 529 fois - Téléchargée 1 176 fois

Description

Quand on fait un contrôle utilisateur et qu'on l'inclut dans une page ASP, de base, on ne peut pas intercepter dans la page un événement déclenché dans le control (comme le clique sur un bouton par exemple).

Cette source montre comment faire pour pouvoir savoir qu'un événement à été déclenché dans le control utilisateur. Elle est très simple, de façon a bien comprendre le principe :
- dans le control utilisateur, on déclare de événements EventHandler qui seront déclenchés par les événements des objets du control,
- dans la page ASP qui contient le control, on s'abonne à ces événements.
Ainsi, le fait de cliquer sur un des boutons va déclencher l'événement OnBoutonClick associé, ce qui aurait pour effet de déclencher l'événement correspondant dans la page.

Attention, ce code ne marche (à ma connaissance) qu'avec la version 2 du framework .Net et pas avec la 1.
C'est du C#. Pour un équivalent de manipulation d'event en VB.Net, voici une source : http://www.c2i.fr/code.aspx?IDCode=610

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

pascatd
Messages postés
14
Date d'inscription
mardi 15 avril 2003
Statut
Membre
Dernière intervention
17 septembre 2007
-
Vraiment bien comme code.
Pour ma part, je complique un peu la tache :
mon controle est une image ou imageBouton suivant les cas et il est apellé dans un gridView. Suivant certains paramètres de la ligne des données du gridView, L'image est un bouton ou non. Enfin la n'est pas le pb. Mon soucis c'est que je ne peux pas faire
this.UserControl1.OnClick += new EventHandler(UserControl1_OnClick); dans le page_Load mais je suis obligé de le faire de la OnRowCreated de mon gridView.
Et du coup, voici mon erreur

La référence d'objet n'est pas définie à une instance d'un objet.

Erreur source:

Ligne 72 : protected void Image_Click(object sender, EventArgs e)
Ligne 73 : {
Ligne 74 : if (e != null) OnImageClick(sender, e);
Ligne 75 : }

Merci d'avance pour ton aide.
Thanos_the_yopper
Messages postés
309
Date d'inscription
vendredi 9 janvier 2004
Statut
Membre
Dernière intervention
5 mars 2009
-
lol y'a pas de quoi, j'espère que tout va bien marché à présent ^^
cs_darunia
Messages postés
357
Date d'inscription
mercredi 18 décembre 2002
Statut
Membre
Dernière intervention
24 mars 2011
1 -
et dans ta page qui contient le controle utilisateur, tu as bien, dans le page_load(object sender, EventArgs e) un truc du style :
this.UserControl1.OnClick += new EventHandler(UserControl1_OnClick);
??

J'avais un peu oublié ce détail ...
En tout cas, merci beaucoup !!!
Thanos_the_yopper
Messages postés
309
Date d'inscription
vendredi 9 janvier 2004
Statut
Membre
Dernière intervention
5 mars 2009
-
alors là, je vois pas tiens. Je pense pas que ça doit faire une grosse différence, mais j'utilise plutôt "sender" au lieu de "this" en paramètre de l'EventHandler.

Sinon, pour info, tu as bien la version 2 du framework .Net ?

et dans ta page qui contient le controle utilisateur, tu as bien, dans le page_load(object sender, EventArgs e) un truc du style :
this.UserControl1.OnClick += new EventHandler(UserControl1_OnClick);
??
cs_darunia
Messages postés
357
Date d'inscription
mercredi 18 décembre 2002
Statut
Membre
Dernière intervention
24 mars 2011
1 -
Declaration de l'evenement :

public event EventHandler OnClick;

Declenchement de l'evenement :

protected void bouton_Click(object sender, EventArgs e)
{
OnClick(this, e); //Ici, OnClick=null -> probleme
}

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.