.NET passer une fonction en paramètre

Résolu
alicvb Messages postés 134 Date d'inscription vendredi 19 mars 2004 Statut Membre Dernière intervention 6 juin 2007 - 5 déc. 2004 à 13:39
alicvb Messages postés 134 Date d'inscription vendredi 19 mars 2004 Statut Membre Dernière intervention 6 juin 2007 - 6 déc. 2004 à 19:30
Voilà, j'aimerais pouvoir passer une fonction ou procédure en paramètre d'une autre fonction ou procédure.
Je m'explique avec un exemple :

sub AjouterControle (texte as string, Even_Click as ????)

dim lb as new label
lb.text = texte
addhandler lb.click, address of even_click

end sub

Comme vou l'aurez compris, la question se trouve dans les ????
J'ai essayé object, mais c'est refusé par le addhandler
J'ai vaguement vu qu'il y aurait peut-être des possibilités du coté des delegate.... mais j'ai rien compris !

Si quelqu'un peut m'aider...

Merci d'avance
AlicVB

6 réponses

cs_labout Messages postés 1356 Date d'inscription samedi 8 décembre 2001 Statut Membre Dernière intervention 23 octobre 2006 8
5 déc. 2004 à 21:48
labout

Alors voila

BO.ajouterControle("Ouvrir",AddressOf Me.cmdAjout_Click)

bien sur si le bouton s'appelle cmdAjout

Et cela doit marcher.
@+
3
cs_labout Messages postés 1356 Date d'inscription samedi 8 décembre 2001 Statut Membre Dernière intervention 23 octobre 2006 8
5 déc. 2004 à 17:13
labout

Si ta fonction est appellée par un bouton par exemple alors c'est
sub AjouterControle (texte as string, Even_Click As System.EventArgs)

si c'est le mousedown

Sub AjouterControle(ByVal texte As String, ByVal Even_Click As System.Windows.Forms.MouseEventArgs)

Si j'ai bien compris ta demande
@+
0
alicvb Messages postés 134 Date d'inscription vendredi 19 mars 2004 Statut Membre Dernière intervention 6 juin 2007 1
5 déc. 2004 à 18:38
Merci labout d'avoir essayé de répondre.
Malheureusement je me suis mal exprimé et ce que tu me proposes ne me semble pas convenir.
Alors je m'explique plus longuement.

Je veux pouvoir charger dynamiquement différents controles sur une form en fonction d'une liste (c'est pour une barre d'outils).
J'ai une classe qui gère les barres d'outils.
Depuis ma form, lors du load :
'Je charge ma classe Barre_Outils
dim BO as new Cl_BarreOutils
'Je charge tous les controles possibles et leurs évenements
BO.ajouterControle("Ouvrir",????????)
BO.ajouterControle("Fermer",????????)

de plus, sur ma form, j'ai les événements pour chaque bouton possible

Public sub Ouvrir_Click(sender as object, e as system.eventargs)
......
End sub
Public sub Fermer_Click(sender as object, e as system.eventargs)
......
End sub
........................

Ce que je voudrait, c'est pouvoir référencer mon sub "Ouvrir_Click" à l'endroit des ???????

Comme ça dans ma classe Barre_Outils, si le fichier de préférence me dit qu'il faut afficher le bouton Ouvrir, je le créé et je configure l'événement comme il faut.

Oulàlà, plus j'explique plus je m'embrouille...
Pour résumer en d'autres mots, je cherche comment faire référnece à une procédure dans une variable. (c'est plus clair?)

Enfin Bref, si vous avez lu jusque ici, c'est déjà pas mal !!!
Si en plus vous aviez une piste, alors là ....

AlicVB
0
cs_CanisLupus Messages postés 3757 Date d'inscription mardi 23 septembre 2003 Statut Membre Dernière intervention 13 mars 2006 20
5 déc. 2004 à 19:18
Salut,
Comme tu dis c l'embrouille mais si ça peut t'aider, voilà un ex en VB6 :

Private Sub Form_Load()
Resultat addition(2, 5)
End Sub

Function addition(a As Integer, b As Integer) As Integer
addition = a + b
End Function

Sub Resultat(r As Integer)
MsgBox r
End Sub


Explik : Dans le Form_Load j'appelle la procédure Resultat à laquelle je passe en paramètre la function addition.

A toi d'adapter ça.

@+

Cordialement, CanisLupus
0

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

Posez votre question
alicvb Messages postés 134 Date d'inscription vendredi 19 mars 2004 Statut Membre Dernière intervention 6 juin 2007 1
5 déc. 2004 à 20:17
Merci de te pencher sur mon cas CanisLupus,
Mais il me semble que dans ton exemple, tu passe plutot le résultat de l'addition à la fonction résultat...
Tu ne passe donc pas pas une fonction en paramètre, mais un résultat.

Or dans mon cas, il faut que j'associe un événement d'un controle créé dynamiquement à sa procédure d'évennement. donc je ne peux me contenter de passer le résultat en paramètre...

Sauf si je m'abuse (ce qui est fort possible...)

Je l'admet, c'est pas une question facile, ni courante... et je suis même pas sur que ce soit possible avec VB.NEt (c'est possible avec le c++ et les pointeur de fonction)...

merci quand même

AlicVB
0
alicvb Messages postés 134 Date d'inscription vendredi 19 mars 2004 Statut Membre Dernière intervention 6 juin 2007 1
6 déc. 2004 à 19:30
Merci labout...

je rajoute pour ceux qui passeraient par là la déclarartion de la procédure AjouterControle :

public sub AjouterControle(tx as string, even as EventHandler)
dim lb as new label
lb.text=tx
addhandler lb.click,even
.....

Merci encore, ceci m'évitera d'utiliser les CallByName, qui sont ni propres, ni efficaces, et encore moins pratique au déboguage...

AlicVB
0
Rejoignez-nous