EVENEMENT ET DELEGATE

Résolu
AXELMEDICAL Messages postés 96 Date d'inscription mercredi 26 mai 2010 Statut Membre Dernière intervention 27 mai 2010 - 5 déc. 2006 à 14:13
sachie Messages postés 93 Date d'inscription jeudi 7 juin 2007 Statut Membre Dernière intervention 16 septembre 2010 - 12 mars 2008 à 09:26
SALUT


j'ai ajouter une dll externe à mon projet.j'arrive à utiliser les clases de celle ci sans probléme.
tout ce gate lorque je veux utiliser un évenement de cette dll.
pouver vous m'éxpliquer comment mettre un évenement en place puis la differenrence et les rélation qui existe apparement entre delegate et event???
n'hesiter pas à me poser des questions si cela n'est pas claire!!
je vous avou que ce n'est pas vraiment claire dans ma tete

Merci

5 réponses

leprov Messages postés 1160 Date d'inscription vendredi 23 juillet 2004 Statut Membre Dernière intervention 21 octobre 2010 17
5 déc. 2006 à 16:49
imaginons que tu aies instancié un objet "obj" qui vienne de ta dll. Cet objet a un event EventX. si tu es sous Visual studio, tu as juste a faire :

ObjetDeLaDll obj = new ObjetDeLaDll();

obj.EventX += /*la tu appuies sur tab, ca génère ce qui suit :*/
// obj.EventX += new EventHandler(obj_EventX); //A ce moment "new EventHandler(obj_EventX); est sélectionné, tu réappuie sur tab et ca génère la méthode dans laquelle tu devra taper ton code
//le code généré sera du style de ce qui suit :
void obj_EventX(objet sender, EventArgs e)
{
//Tape le code a éxecuter lors de l'execution de l'event ici
}
3
leprov Messages postés 1160 Date d'inscription vendredi 23 juillet 2004 Statut Membre Dernière intervention 21 octobre 2010 17
5 déc. 2006 à 15:19
Alors pour commencer, un delegate cest quoi :
un delegate cest un "pointeur de fonction" (pour parler C/C++, et expliquer). En gros, un delegate est une variable qui indique de quel type est la fonction. par exemple, pour une fonction qui serait

int methodetest(int coucou)
le delegate correspondant serait
delegate int MondelegateQuiRetourneint(int LeParametre);

Ainsi, tu peux déclarer une variable de type "méthode qui retourne un int et prend un int en paramètre). tu va ainsi pouvoir faire ce genre de choses :

void MaMethode1()
{
MondelegatequiRetourneint variable = MultiplierPar2;
int x = variable(2);
//ca reviens exactement a faire :
//int x = MultiplierPar2(2);
}

Ok, mais a quoi ca sert? et bien justement entre autres à utiliser des events. un event possède une liste de delegate, et pour chaque delegate que tu lui a assigné, il appelle la méthode correspondante. en bref, ca sert a ce que quand un certain truc se produit, cela appelle tes méthodes que tu as définies. bon ca doit etre un peu flou, mais tu devrais comprendre avec l'exemple qui suit :


prenont l'exemple du click sur un bouton. le bouton possède un event click. ca veut dire qu'en interne, le bouton possède une liste de delegate d'un certain type. lorsque tu click sur ton bouton en mode design, cela te génère une méthode dans laquelle tu met le code qui va se produire lors du click (jusque la ca doit te parler je pense), mais dans le code que tu ne vois pas forcément, cela ajoute une ligne de ce style :
bouton1.click += new eventhandler(bouton1_click);

cela signifie que la liste de delegate "click" de "bouton1" stocke que lors du click sur le bouton, on doit aussi appeler "bouton1_click". ca c'est pour l'informel. pour le formel, on dira que la méthode "bouton1_click" est abonnée a l'event "click" de "bouton1".

j'espere que c'est clair comme explication, mais c'est pas si evident que ca a expliquer ;)


en bref, un delegate c'est un type fonction, dont on peut déclarer des variables, et un event, cest un évènement qui lorsqu'il se produit appelle toutes les méthodes du type delegate défini....ahem, pas plus clair qu'avant, mais bon....
0
AXELMEDICAL Messages postés 96 Date d'inscription mercredi 26 mai 2010 Statut Membre Dernière intervention 27 mai 2010
5 déc. 2006 à 15:54
OK J4AI PLUS OU MOINS COMPRIS MAIS CONCRETEMENT COMMENT JE FAIS AVEC MON DELEGATE DE LA DLL QUE J'AI INSERER DANS MON PROJET!!!
0
AXELMEDICAL Messages postés 96 Date d'inscription mercredi 26 mai 2010 Statut Membre Dernière intervention 27 mai 2010
5 déc. 2006 à 19:37
ok merci
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
sachie Messages postés 93 Date d'inscription jeudi 7 juin 2007 Statut Membre Dernière intervention 16 septembre 2010 2
12 mars 2008 à 09:26
Je ré-up ce topic pour éviter d'en créer un nouveau!

Comme AXELMEDICAL, j'ai une dll et un exe, l'exe appel la dll qui affiche un form, de là je fais mes traitements, je désire ensuite créer un événement afin que mon exe sache que la form de la dll est cachée!

j'ai donc déclaré dans ma dll une classe:

public class FinEventArgs : EventArgs
{
public string Fin;
public FinEventArgs(string fin) { Fin = fin; }
}


puis dans une autre classe de ma dll:
public class ListesImages
{
public delegate void FinEventHandler(object sender, FinEventArgs fii);
public event FinEventHandler Fin;

public void goto_som_cata()
{
e = new FinEventArgs("fin");
maFormSuppZoom.Hide();



if (Fin != null)
{
Fin(this, e);

}

}

}


et dans mon exe:

private void direction_suppzoom(Catalogue monCata)
{
maListeImage.aff_FormSuppZoom(monCata._nom, monCata._chemin_de_creation);

maListeImage.Fin += new ListesImages.FinEventHandler(maListeImage_Fin);
}

void maListeImage_Fin(object sender, FinEventArgs fii)
{
MessageBox.Show("ça marche");
}


et la problème c'est que ça "marche" pas!

déjà Fin est toujours égale à null!
et en faisant du pas à pas j'ai remarqué que:

maListeImage.Fin += new ListesImages.FinEventHandler(maListeImage_Fin);

se déclenche dés l'affichage du Form et n'attends pas le déclenchement dans la fonction: goto_som_cata()
0
Rejoignez-nous