Procédure paramétrée

[Résolu]
Signaler
Messages postés
16
Date d'inscription
mercredi 17 janvier 2007
Statut
Membre
Dernière intervention
19 septembre 2008
-
Messages postés
840
Date d'inscription
mercredi 22 octobre 2003
Statut
Membre
Dernière intervention
7 janvier 2009
-
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

Messages postés
840
Date d'inscription
mercredi 22 octobre 2003
Statut
Membre
Dernière intervention
7 janvier 2009
9
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")
...

Messages postés
4822
Date d'inscription
lundi 11 novembre 2002
Statut
Membre
Dernière intervention
15 novembre 2016
14
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
Messages postés
672
Date d'inscription
mercredi 22 janvier 2003
Statut
Membre
Dernière intervention
2 juin 2016
1
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. 
Messages postés
16
Date d'inscription
mercredi 17 janvier 2007
Statut
Membre
Dernière intervention
19 septembre 2008

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!!
Messages postés
840
Date d'inscription
mercredi 22 octobre 2003
Statut
Membre
Dernière intervention
7 janvier 2009
9
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?
Messages postés
16
Date d'inscription
mercredi 17 janvier 2007
Statut
Membre
Dernière intervention
19 septembre 2008

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!!