.NET passer une fonction en paramètre

[Résolu]
Signaler
Messages postés
134
Date d'inscription
vendredi 19 mars 2004
Statut
Membre
Dernière intervention
6 juin 2007
-
Messages postés
134
Date d'inscription
vendredi 19 mars 2004
Statut
Membre
Dernière intervention
6 juin 2007
-
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

Messages postés
1356
Date d'inscription
samedi 8 décembre 2001
Statut
Membre
Dernière intervention
23 octobre 2006
7
labout

Alors voila

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

bien sur si le bouton s'appelle cmdAjout

Et cela doit marcher.
@+
3
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 70 internautes nous ont dit merci ce mois-ci

Messages postés
1356
Date d'inscription
samedi 8 décembre 2001
Statut
Membre
Dernière intervention
23 octobre 2006
7
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
@+
Messages postés
134
Date d'inscription
vendredi 19 mars 2004
Statut
Membre
Dernière intervention
6 juin 2007

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
Messages postés
3757
Date d'inscription
mardi 23 septembre 2003
Statut
Modérateur
Dernière intervention
13 mars 2006
16
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
Messages postés
134
Date d'inscription
vendredi 19 mars 2004
Statut
Membre
Dernière intervention
6 juin 2007

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
Messages postés
134
Date d'inscription
vendredi 19 mars 2004
Statut
Membre
Dernière intervention
6 juin 2007

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