Procédure paramétrée

Résolu
cabraloca Messages postés 16 Date d'inscription mercredi 17 janvier 2007 Statut Membre Dernière intervention 19 septembre 2008 - 4 juin 2008 à 16:19
Kevin.Ory Messages postés 840 Date d'inscription mercredi 22 octobre 2003 Statut Membre Dernière intervention 7 janvier 2009 - 8 juin 2008 à 03:59
Bonjour,
je vais essayer d'être claire quand au problème que j'ai...

Dans une procédure je fais appel à une autre procédure de la manière suivante:

public sub Refresh(Param as string)
    select case Param
       case "lieu"
            call GetNblieu
       case "site"
            call GetNbsite
       case "tva"
            call GetNbtva
    end select
end sub

je voudrais bien ne pas avoir à faire tous ces case vu que le nom de la procédure apellée ne diffère qu'à la fin et correspond au paramètre Param...

N'y a t'il pas moyen de faire un truc du style?:
public sub Refresh(Param as string)
           call GetNb

end sub

Merci d'avance pour vos réponses

6 réponses

Kevin.Ory Messages postés 840 Date d'inscription mercredi 22 octobre 2003 Statut Membre Dernière intervention 7 janvier 2009 11
8 juin 2008 à 03:59
Resalut,

Dsl pour le temps, mais voici un code d'exemple pour l'utilisation des Delegates:

   Private Subs As New Dictionary(Of String, [Delegate])

    Private Delegate Sub GetNblieuDelegate()
    Private Delegate Sub GetNbsiteDelegate()
    Private Delegate Sub GetNbtvaDelegate()

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        ' Créations des Delegates:
        Subs.Add("lieu", New GetNblieuDelegate(AddressOf GetNblieu))
        Subs.Add("site", New GetNbsiteDelegate(AddressOf GetNbsite))
        Subs.Add("tva", New GetNbtvaDelegate(AddressOf GetNbtva))

        ' Utilisation des Delegates:
        Subs("site").DynamicInvoke()
        Subs("tva").DynamicInvoke()
        Subs("lieu").DynamicInvoke()
    End Sub

    Private Sub GetNblieu()
        Console.WriteLine("GetNblieu")
    End Sub

    Private Sub GetNbsite()
        Console.WriteLine("GetNbsite")
    End Sub

    Private Sub GetNbtva()
        Console.WriteLine("GetNbtva")
    End Sub

Mais bon, perso je pense que de faire un SelectCase dans une Sub reste le moyen le plus facile.
"mais je ne veux pas mettre de paramètre à la procèdure GetNb car déjà
ça ne fait que reporter le problème car les select case se retrouveront
dans cette nouvelle procédure et en plus les procédures GetNbsite,
GetNblieu et autres sont déjà créées et je ne veux pas y retoucher!!"
Bah oui mais tu n'aura plus que 1 seul Select Case. Tu ajoute cette procédure et c'est pret:

    Private Sub GetNb(ByVal Param As String)
        Select Case Param
            Case "lieu"
                GetNblieu()
            Case "site"
                GetNbsite()
            Case "tva"
                GetNbtva()
        End Select
    End Sub

Dans ton code tu n'auras qu'à taper:

GetNb("lieu")
GetNb("site")
...

cs_Exploreur Messages postés 4821 Date d'inscription lundi 11 novembre 2002 Statut Membre Dernière intervention 15 novembre 2016 15
4 juin 2008 à 16:35
Salut,

Je ne sais pas si j'ai bien compris...^^

public sub Refresh(Param as string)

    <strike>select case Param</strike>
       <strike>case "lieu"
</strike>          <strike>  call GetNblieu</strike>
       <strike>case "site"
            call GetNbsite
       case "tva"

</strike>            call GetNb (Param)

    <strike>end select</strike>

end sub

Private Sub GetNb(sChaine As String)

Msgbox sChaine

End Sub

A+
Exploreur

 Linux a un noyau, Windows un pépin
cs_loulou69 Messages postés 672 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 2 juin 2016 1
4 juin 2008 à 16:39
bonjour

Ok pour
Call GetNb(Param) 

Par contre les objets "lieu" , "site" et "tva" seront traités dans la fonction getNb qui risque de reporter l'instruction "select case" de la fonction Refresh à la fonction GetNb


Si un grand nombre de lignes étaient identiques dans GetNbLieu GetNbSite et GetNbTva cela d'un coté réduira le nombre de lignes totales sauf qu'au sens de la programmation objet chacun des 3 objets nécessiterait un module séparé : mesurer l'impact pour les maintenances à venir. 
cabraloca Messages postés 16 Date d'inscription mercredi 17 janvier 2007 Statut Membre Dernière intervention 19 septembre 2008
4 juin 2008 à 17:10
merci pour vos réponses mais je ne veux pas mettre de paramètre à la procèdure GetNb car déjà ça ne fait que reporter le problème car les select case se retrouveront dans cette nouvelle procédure et en plus les procédures GetNbsite, GetNblieu et autres sont déjà créées et je ne veux pas y retoucher!!

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

Posez votre question
Kevin.Ory Messages postés 840 Date d'inscription mercredi 22 octobre 2003 Statut Membre Dernière intervention 7 janvier 2009 11
4 juin 2008 à 22:10
Salut,

Il y a sans doute des moyens de faire ça, mais ca risque d'être assez compliqué, en tout cas plus que de faire 3 Case

"je voudrais bien ne pas avoir à faire tous ces case"
Tu parle bien de 3 Case? Ou tu en a plus?
cabraloca Messages postés 16 Date d'inscription mercredi 17 janvier 2007 Statut Membre Dernière intervention 19 septembre 2008
5 juin 2008 à 09:33
je parle de 7 cases (j'ai pas tout mis ici) mais c'est surtout que je dois faire ça à 5 endroits dans mon code, donc du coup ça fait tout de suite plus de case...
J'ai trouvé un début de piste avec les adressof mais je ne sais pas comment ça marche ce truc... et si c'est vraiment adapté à mon problème!!
Rejoignez-nous