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 :

AddHandler avec Handler qui prend ses arguments lors d'une boucle [Débutant]


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Septembre 2012
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2012
    Messages : 5
    Par défaut AddHandler avec Handler qui prend ses arguments lors d'une boucle
    Bonjour à tous,

    Je suis débutant en VB.NET et je rencontre actuellement un problème lors de l'attribution d'EventHandlers à des contrôles crées dynamiquement.
    En résumé à chaque création d'une nouvelle DropDownItem dans le menu de mon application, je veux lui attribuer l'exécution d'une Sub qui prend des arguments dépendant de la DropDownItem cliquée.
    Par exemple si je clique sur "Calculateur n°1", une fenêtre aux caractéristiques du calculateur n°1 doit être crée pas la Sub. Ainsi de suite avec "Calculateur n°2" etc...

    Voici le bout code en question:

    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
    For i As Integer = 0 To NumberOfECU - 1
    	Dim j As Integer
        	j = i
     
        	TCFMonitoringTool.CalculateursToolStripMenuItem.DropDownItems.Add(menuArray(i, 2)) 'Création dynamique du menu des Calculateurs
        	AddHandler TCFMonitoringTool.CalculateursToolStripMenuItem.DropDownItems.Item(i).Click, Sub(senderObj, args) _
                    beforeCreateECU(TCFMonitoringTool.CalculateursToolStripMenuItem.DropDownItems.Item(j), j)
     
    Next
     
     
    Sub beforeCreateECU(ByVal menuItem As ToolStripItem, ByVal ECUline As Integer)
     
         	Dim i As Integer = 0
         	Dim ECUCreated As Boolean = False
     
         	While ECUCreated = False
     
             	If IsNothing(ECU(ECUline, i)) = False AndAlso ECU(ECUline, i).Text = "" Then
     
                 		createECU(ECUline, i, menuItem)
                 		ECUCreated = True
     
             	ElseIf IsNothing(ECU(ECUline, i)) = True Then
     
                 		createECU(ECUline, i, menuItem)
                 		ECUCreated = True
             	Else
                 		i = i + 1
             	End If
         	End While
     
     End Sub


    Suite à ceci, j'ai bien les DropDownItems qui apparaissent dans le menu de l'application, avec les nom corrects, mais lorsque je clique par exemple sur celle qui s'appelle "Calculateur n°1", c'est une fenêtre à l'image de "Calculateur n°6" qui apparaît. C'est à dire le dernier calculateur de ma liste, donc la dernière itération de la boucle For.
    Pourquoi les arguments envoyés à ma Sub sont systématiquement les mêmes, quel que soit la DropDownItem cliquée? Pourtant dans AddHandler je précise bien que chaque Item(i) doit avoir sa propre Sub(argument1(i), argument2(i)) associée?

    Merci d'avance pour votre aide.

  2. #2
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 197
    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 197
    Par défaut
    la première chose à vérifier c'est de mettre un point d'arret dans la méthode pour voir si les arguments sont les bons
    si c'est le cas c'est le code d'après qui ne fait pas ce qu'il faut

    avec par exemple un espion express sur (menuitem is TCFMonitoringTool.CalculateursToolStripMenuItem.DropDownItems.Item(0)) pour un clic sur le 1er item
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  3. #3
    Membre à l'essai
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Septembre 2012
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2012
    Messages : 5
    Par défaut
    Merci pour votre aide Pol63,

    J'ai crée un espion express comme vous l'avez préconisé mais ça ne fonctionne pas. Mon grand problème sur cette ligne AddHandler c'est que je ne peux rien visualiser durant le débogage.

  4. #4
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 197
    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 197
    Par défaut
    il faut mettre un point d'arret (F9) sur
    Sub beforeCreateECU(ByVal menuItem As ToolStripItem, ByVal ECUline As Integer)

    et là faire un espion express (shift+F9) pour vérifier le contenu de menuItem et ECUline
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  5. #5
    Membre à l'essai
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Septembre 2012
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2012
    Messages : 5
    Par défaut
    D'accord j'avais mal compris, donc ca me donne à chaque fois:
    menuItem = {Calculateur 6}
    ECUline = 6
    autrement dit les dernières infos de la boucle For qui s'est produite dans la fonction précédente.
    On dirait donc que la Sub fonctionne bien (elle m'affiche effectivement une fenêtre) mais pas avec les bons arguments (la fenêtre n'est pas celle décrivant le Calculateur demandé)

  6. #6
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 197
    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 197
    Par défaut
    tu peux tenter de mettre un point d'arret sur le AddHandler mais avec la méthode anonyme ca ne simplifie pas le débuggage

    sinon tu peux faire la méthode standard, à savoir faire addhander , addressof laméthode

    et dans la méthode tu as sender qui est l'élement déclencheur, ce qui revient quasiment au même que ce que tu fais sans créer x méthodes anonymes
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

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

Discussions similaires

  1. [AC-2010] Fonction dans un module qui prend en argument un formulaire
    Par kawaya dans le forum VBA Access
    Réponses: 2
    Dernier message: 19/07/2013, 13h22
  2. fonction qui modifie ses arguments d'entrée
    Par Amergin dans le forum Caml
    Réponses: 9
    Dernier message: 05/01/2009, 17h32
  3. Nommer ses états lors d'une exportation
    Par pierre24 dans le forum IHM
    Réponses: 4
    Dernier message: 06/08/2008, 11h30
  4. Création d'une fonction qui prend en argument une liste de cellule
    Par Dereck07 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 29/12/2007, 20h49
  5. Qu'est ce qui prend de la place dans une db access
    Par lepirlouit dans le forum Access
    Réponses: 8
    Dernier message: 25/07/2006, 10h19

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