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 :

Connaitre le nom de la fonction qui l'a appelé


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    156
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 156
    Par défaut Connaitre le nom de la fonction qui l'a appelé
    Bonjour a toutes et tous,

    Vous allez d'abords me dire : as tu déjà cherché sur le net ?
    Je vous dirais bien sur, je préfère essayer de chercher par mes moyens avant de venir demander de l'aide.

    Mais la je vous avoue que je patauge un peux.
    En effet, je voudrais savoir s'il existe un moyen de connaitre le nom de la fonction qui en appel une autre.
    Cela ne me parait pas claire, je m'explique :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    sub SUB1()
             SUB3()
    End Sub
     
    sub SUB2()
             SUB3()
    End sub
     
    sub SUB3()
             SI appel par SUB1 ALORS
     
             SI appel par SUB2 ALORS
    End sub
    Merci de votre aide

    Et pardonné moi si la réponse a déjà été donné ou si je suis censé la connaitre.

  2. #2
    Membre éprouvé Avatar de Anklor
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2011
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2011
    Messages : 76
    Par défaut
    Tu passes tout simplement par une variable

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    sub SUB1()
             SUB3("SUB1")
    End Sub
     
    sub SUB2()
             SUB3("SUB2")
    End sub
     
    sub SUB3(ProcedureAppelante as String)
             if ProcedureAppelante ="SUB1" ......
     
             if ProcedureAppelante ="SUB2" ......
    End sub

  3. #3
    Membre expérimenté
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Par défaut
    Pas besoin de connaître la méthode appelante, il suffit de passer un paramètre à la méthode appelée.

    Par exemple
    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
     
    sub SUB1()
             SUB3(True)
    End Sub
     
    sub SUB2()
             SUB3(False)
    End sub
     
    sub SUB3(param As Boolean)
             If param Then
                 ...
             Else
                 ...
             End If
    End sub
    En espérant que je ne me sois pas trompé dans l'écriture, ne faisant pas de VB.Net ^^

    Edit : Grilled

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    156
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 156
    Par défaut
    Merci pour ces réponses.
    J'avais envisagé de faire ce genre de chose, mais je pensais qu'il existait une autre manière de le faire, comme par exemple, dans le SUB3, connaitre le nom du sub appelant.

  5. #5
    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 caller of a method,nom de l'appelant
    bonjour
    tu veux connaitre le nom de l'appelant ,quova dis?
    oui tu peux acceder au frame la pile:
    voici un code exhaustif avec 2 formes:
    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
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
     
    '1er forme appele ses methodes internes
    'appele les methodes d'un autre forme
    Imports System.Reflection
    Public Class Form1
        Private maForme2 As Form2 = New Form2
        Private Sub btnExecuteMethode1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnExecuteMethode1.Click
            Call Method1()
        End Sub
     
        Public Sub Method1()
            Dim n As Integer = 5
            n = n + 1
            Me.TextBox1.Text = n.ToString & vbCrLf
            Dim stTraceFrame As StackFrame = New StackFrame(1)
            Dim methode As MethodBase = stTraceFrame.GetMethod
            MessageBox.Show("Objet : " & methode.DeclaringType.FullName & " Appele par Sub : " & methode.Name)
            Me.TextBox3.Text = ""
            Me.TextBox3.Text = "Objet : " & methode.DeclaringType.FullName & " Appele par Sub : " & methode.Name & vbCrLf
            Call Method2()
        End Sub
        Public Sub Method2()
            Dim n As Integer = 3
            Dim d As Double = 125.45
            d = n * d
            Me.TextBox2.Text = d.ToString
            Dim stTraceFrame As StackFrame = New StackFrame(1)
            Dim methode As MethodBase = stTraceFrame.GetMethod
            MessageBox.Show("Objet Appelant  : " & methode.DeclaringType.FullName & " Appele par Sub : " & methode.Name)
     
            Me.TextBox3.Text = Me.TextBox3.Text & "Objet Appelant : " & methode.DeclaringType.FullName & " Appele par Sub : " & methode.Name
        End Sub
     
        Private Sub btnExecuteMethode2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnExecuteMethode2.Click
            maForme2.Method3()
            maForme2.Show()
     
        End Sub
    End Class
    '2eme forme
    Imports System.Reflection
    Public Class Form2
        Public Sub New()
     
            ' Cet appel est requis par le Concepteur Windows Form.
            InitializeComponent()
     
            ' Ajoutez une initialisation quelconque après l'appel InitializeComponent().
     
        End Sub
     
        Public Sub Method3()
            Dim n As Integer = 0
            Dim d As Double = 0
            d = n * 125.45
            Me.TextBox1.Text = d.ToString
            Dim stTraceFrame As StackFrame = New StackFrame(1)
            Dim methode As MethodBase = stTraceFrame.GetMethod
            MessageBox.Show("Objet Appelant : " & methode.DeclaringType.FullName & " Appele par Sub : " & methode.Name)
            Me.TextBox2.Text = Me.TextBox2.Text & "Objet Appelant : " & methode.DeclaringType.FullName & " Appele par Sub : " & methode.Name
        End Sub
    End Class
    bon code....

  6. #6
    Membre Expert Avatar de Guulh
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    2 160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 2 160
    Par défaut
    Citation Envoyé par MABROUKI Voir le message
    bonjour
    tu veux connaitre le nom de l'appelant ,quova dis?
    oui tu peux acceder au frame la pile:
    Attention !
    1,
    2,
    3

    Nooooooooooooooooooooooon, pas la réflexion !

    Le besoin est suuuuper simple, c'est même pas de la POO, c'est juste d'avoir une méthode dont le comportement dépend du contexte, et ça tombe pile poil bien parce que c'est précisément à ça que servent les paramètres des méthodes.

    Blague à part: sans parler d'objet, de module, etc. le strict minimum d'encapsulation que l' on peut espérer, et que même C (et l'assembleur, je suppose) permet, c'est au niveau de la fonction. Et si une fonction doit remonter la pile d'appels pour savoir quoi faire, à quoi ça sert de faire une fonction...

    Ca mérite un haiku (sans diérèse):

    La réflexion est puissante,
    mais n'est solution
    que de bien peu de problèmes.

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    156
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 156
    Par défaut
    Merci, c'est exactement ce que je cherchais.

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 25/07/2012, 23h10
  2. Connaitre le nom de la machine qui heberge le serveur DNS
    Par killersky4 dans le forum Réseau
    Réponses: 3
    Dernier message: 03/04/2011, 15h39
  3. Réponses: 0
    Dernier message: 29/09/2010, 11h53
  4. Call un .so sous Unix sans connaitre le nom de la fonction
    Par yopiyop4485 dans le forum Bibliothèque standard
    Réponses: 7
    Dernier message: 16/09/2009, 13h59
  5. [Reflection] Comment connaitre le nom de la classe qui appelle une méthode?
    Par framus.class dans le forum API standards et tierces
    Réponses: 11
    Dernier message: 09/06/2008, 09h13

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