IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

Passer une fonction en paramtre


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur amateur VBA Excel
    Inscrit en
    Janvier 2013
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur amateur VBA Excel
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Janvier 2013
    Messages : 69
    Par défaut Passer une fonction en paramtre
    Bonjour,

    Je suis débutant et je cherche à faire quelque chose qui m'avait l'air d'être simple mais qui est fait un peu plus compliqué (apparemment).

    J'ai une sub qui fait une boucle sur tous les fichiers contenus dans un dossier et ses sous-dossiers.
    J'aimerais pouvoir passer une sub à effectuer pour chaque fichier. (j'ai l'impression qu'il faut utiliser des delegates mais je comprend pas comment ça fonctionne)
    Par exemple à un moment dans mon code j'aimerais juste compter le nombre de fichiers d'un certain type, à un autre agir sur ces fichiers.

    Certes je pourrais mettre tous les noms de fichier et leur chemins dans un array mais juste pour m'améliorer j'aimerais réussir à passer la sub.

    Peut-être ne suis-je pas très clair, je vous met donc un morceau de code "rêvé"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
        Sub VersDebugPrint(NomDeFichier As String)
            Debug.Print(NomDeFichier)
        End Sub
     
        Sub VersMsgbox(NomDeFichier As String)
            MsgBox(NomDeFichier)
        End Sub
     
        Sub Main()
            Call ListeDesFichier(VersDebugPrint)
            Call ListeDesFichier(VersMsgbox)
        End Sub
     
        Sub ListeDesFichier(maSub As sub)
            'blablabla
            For Each ficher In ListeDesFichier()
                maSub(fichier)
            Next
            'blablabla
        End Sub
    Merci d'avance à ceux qui auront pris le temps de me lire,
    Et encore plus merci à ceux qui prendraient le temps de me répondre :-)
    En vous souhaitant un bon dimanche :-)

  2. #2
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 204
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 204
    Par défaut
    c'est pas as sub, mais as action (les delegués ca fonctionnerait aussi mais action/func sont une manière plus récente de faire la même chose)
    action remplace sub
    action(of string) remplace par exemple un sub(unstring as string) (ton cas ici), tous les paramètres sont à gérer ainsi

    pour une fonction (avec retour) c'est func(of {params}, type_retour)
    {params} étant optionnel et représentant les paramètres d'entrées
    ensuite une fois que tu tas variable de type action tu peux l'exécuter (je sais plus si le nom de la variable suffit ou s'il faut faire .invoke dessus)
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  3. #3
    Membre extrêmement actif
    Inscrit en
    Avril 2008
    Messages
    2 573
    Détails du profil
    Informations personnelles :
    Âge : 65

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 573
    Par défaut
    bonjour
    Pol63 a raison il faut utiliser le delegué general Action et Action.Invoke.
    Mais compte tenu de ce que tu veux(associer une chaine nom de fichier à une fonction ou sub donnée),il te faut un Dictionary (of TKey,TValue) d'appariement.
    code exemple .vb:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
     
    Public Class Form1
        Private tonDict As New Dictionary(Of String, Action(Of String))
        Private Sub Form1_Load(sender As Object, e As System.EventArgs) Handles Me.Load
            tonDict.Add("aa", AddressOf Sub1)
            tonDict.Add("bb", AddressOf Sub2)
            tonDict.Add("cc", AddressOf Sub3)
            Call ListeDesFichier(tonDict)
        End Sub
        Sub ListeDesFichier(ledictionnaire As Dictionary(Of String, Action(Of String)))
            'blablabla
            For Each de In ledictionnaire
                Dim action As Action(Of String) = CType(de.Value, Action(Of String))
                Dim s As String = CType(de.Key, String)
                action.Invoke(s)
            Next
            'blablabla
        End Sub
     
     
        Sub Sub1(NomDeFichier As String)
            MsgBox(NomDeFichier)
        End Sub
     
        Sub Sub2(NomDeFichier As String)
            MsgBox(NomDeFichier)
        End Sub
        Sub Sub3(NomDeFichier As String)
            MsgBox(NomDeFichier)
        End Sub
     
     
     
     
     
    End Class
    bon code....

Discussions similaires

  1. Réponses: 16
    Dernier message: 26/05/2009, 13h32
  2. Passer une fonction en paramètre, sans delegate
    Par deejay2221 dans le forum C#
    Réponses: 8
    Dernier message: 26/03/2009, 20h22
  3. Réponses: 15
    Dernier message: 02/08/2007, 11h17
  4. Passer une fonction en paramètre ...
    Par Freeze dans le forum C++Builder
    Réponses: 2
    Dernier message: 14/10/2005, 16h51
  5. [Conception] Passer une fonction en paramètre
    Par pejay dans le forum Langage
    Réponses: 9
    Dernier message: 09/12/2004, 13h58

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo