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 :

appel d'une fonction/sub passé(e) en paramètre


Sujet :

VB.NET

  1. #1
    Membre éprouvé Avatar de avigeilpro
    Homme Profil pro
    Ambulancier
    Inscrit en
    Janvier 2004
    Messages
    880
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Creuse (Limousin)

    Informations professionnelles :
    Activité : Ambulancier
    Secteur : Transports

    Informations forums :
    Inscription : Janvier 2004
    Messages : 880
    Points : 971
    Points
    971
    Par défaut appel d'une fonction/sub passé(e) en paramètre
    Bonjour,
    Désolé si mon titre venait à ne pas être explicit.
    Voila je vous expose mon problème :
    J'ai une classe qui contient un tableau :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
        Public Class TWindowInfo
     
            Public Class TableStruct
                    '....
            End Class
     
            Public Tables() As TableStruct
        End Class
    Puis dans une Form je fais ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
            Public ListeTables As New TWindowInfo
     
            '.....
     
            Dim tmpTable As TWindowInfo.TableStruct
            For Each tmpTable In ListeTables.Tables
                    '... traitement sur TmpTable
            Next
    J'aurais voulu savoir si il était possible de faire quelque chose du genre, et si oui comment je devais m'y prendre :
    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
     
        Public Class TWindowInfo
     
            Public Class TableStruct
                    '.....
            End Class
     
            Public Tables() As TableStruct
     
            Public Sub ForEachTable(<adresse de la Function/Sub>)
                    Dim TmpTable As TableStruct
                    For Each tmpTable In Tables
                            'Appeler la Function/Sub passée en paramètre
                    Next
            End Sub
     
        End Class
    Puis dans une Form je fais ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
            Public ListeTables As New TWindowInfo
     
            '.....
     
            ListeTables.ForEachTable(AddressOf MonTraitement)
     
            '.....
     
            Public Sub MonTraitement(tmpTable As TWindowInfo.TableStruct)
                    traitement sur tmpTable
            End Sub

    Je fais cela dans le but de rendre plus lisible mon code principale.

    Donc mes deux questions sont :
    Est-il possible de passer/reccupérer l'adresse d'une Function/Sub en parramètre afin de l'appeler après.
    Si oui comment s'y prendre.

    Merci d'avance pour toute suggestion.
    La connaissance seule ne suffit pas. La vraie compréhension vient de la mise en expérience.
    Règles|FAQ|Tuto

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

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    les types action et func sont des "pointeurs" vers des méthodes et fonctions
    ca n'est pas dispo sur le framework 2 par contre ...
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  3. #3
    Membre éprouvé Avatar de avigeilpro
    Homme Profil pro
    Ambulancier
    Inscrit en
    Janvier 2004
    Messages
    880
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Creuse (Limousin)

    Informations professionnelles :
    Activité : Ambulancier
    Secteur : Transports

    Informations forums :
    Inscription : Janvier 2004
    Messages : 880
    Points : 971
    Points
    971
    Par défaut
    En fait je viens à l'instant de trouver la solution, après toutes ces heures a essayer de comprendre quelque chose qui finalement se trouve être très simple.
    Il suffit d'utiliser un Delegate :
    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
     
        Public Class TWindowInfo
     
            Delegate Sub MyDelegate(Table As TableStruct)
     
            Public Class TableStruct
                    '.....
            End Class
     
            Public Tables() As TableStruct
     
            Public Sub ForEachTable(CBSub As MyDelegate)
                    Dim TmpTable As TableStruct
                    For Each tmpTable In Tables
                            CBSub.Invoke(tmpTable)
                    Next
            End Sub
     
        End Class
    Puis dans une Form je fais ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
            Public ListeTables As New TWindowInfo
     
            '.....
     
            ListeTables.ForEachTable(AddressOf MonTraitement)
     
            '.....
     
            Public Sub MonTraitement(tmpTable As TWindowInfo.TableStruct)
                    'traitement sur tmpTable
            End Sub
    Merci quand même
    La connaissance seule ne suffit pas. La vraie compréhension vient de la mise en expérience.
    Règles|FAQ|Tuto

  4. #4
    Modérateur
    Avatar de Sankasssss
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2006
    Messages
    1 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 842
    Points : 4 232
    Points
    4 232
    Par défaut
    Vous avez fait la même chose que vous conseillait Pol63 mais par un moyen détourné
    Voici ce que ça aurait donné avec un délégué Action :
    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
    Public Class TWindowInfo
     
        Public Class TableStruct
            '.....
        End Class
     
        Public Tables() As TableStruct
     
        Public Sub ForEachTable(CBSub As Action(Of TableStruct))
            Dim TmpTable As TableStruct
            For Each TmpTable In Tables
                CBSub.Invoke(TmpTable)
            Next
        End Sub
     
    End Class
    Voila, c'était juste pour information

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

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    delegate est la façon originelle, action et func prennent un peu moins de lignes de code à utiliser mais font la même chose
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  6. #6
    Membre éprouvé Avatar de avigeilpro
    Homme Profil pro
    Ambulancier
    Inscrit en
    Janvier 2004
    Messages
    880
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Creuse (Limousin)

    Informations professionnelles :
    Activité : Ambulancier
    Secteur : Transports

    Informations forums :
    Inscription : Janvier 2004
    Messages : 880
    Points : 971
    Points
    971
    Par défaut
    Merci pour l'information, je prend, quelques lignes de code en moins c'est toujours ça et puis comme ça je saurais faire si un jour j'en ai besoin
    La connaissance seule ne suffit pas. La vraie compréhension vient de la mise en expérience.
    Règles|FAQ|Tuto

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 9
    Dernier message: 08/12/2009, 16h03
  2. Appel d'une fonction
    Par georgeabitbol dans le forum ASP
    Réponses: 4
    Dernier message: 08/07/2004, 14h29
  3. Réponses: 4
    Dernier message: 02/06/2004, 16h35
  4. Appel d'une fonction
    Par jfphan dans le forum ASP
    Réponses: 4
    Dernier message: 14/04/2004, 15h06
  5. A la recherche de l'appel d'une fonction...
    Par karl3i dans le forum C
    Réponses: 3
    Dernier message: 24/09/2003, 12h34

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