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 :

Ajouter des évènements sur des objets dynamiques [Débutant]


Sujet :

VB.NET

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 89
    Points : 47
    Points
    47
    Par défaut Ajouter des évènements sur des objets dynamiques
    Bonjour,

    J'ai un form qui au chargement lit un fichier .ini
    Il m'affiche en conséquence sous forme de label (pour certaines) les informations du fichier ini
    Je souhaite ajouter à mes labels créés dynamiquement, le OnClick avec les fonctions qui vont bien.

    Je débute en VBExpress 2008, je cherche sur le net, je suis arrivé à faire tout mon formulaire, j'alimente mes CheckekListBox et mes labels.
    Mon but étant d'afficher la CheckedListBox en fonction du label cliqué.

    Est ce possible, ou non ?
    Si vous souhaitez le code, pas de soucis, le mettrait

    Amicalement,
    Thierry

  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
    AddHandler instance.event, AddressOf subquigèrel'event

    penser à faire removehandler à la fin (sous peine de fuite mémoire)
    (sur le form_closed par exemple, et pour retrouver toutes les instances sur lesquelles faire le removehandler tu peux les mettre dans un List(of Label) en variable de classe)

    si tu envoies plusieurs évènements vers une unique méthode, le déclencheur de l'évènement sera dans sender, mais as object, donc à caster pour l'utiliser

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    dim labelcliqué as label = directcast(sender, label)
    si en plus plusieurs types d'instances peuvent être dans sender, tu peux utiliser TypeOf

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    If TypeOf sender Is Label Then
        ' caster
      ElseIf TypeOf sender Is Button Then
     
    ...

    une autre méthode est de faire une classe qui hérite de Label, avec un overrides de OnClick
    ca permet de mettre du code métier sur un controle, et qu'il soit plus autonome (donc moins de code métier dans le form)
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  3. #3
    Membre du Club Avatar de Chapeau_Bas
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2010
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Décembre 2010
    Messages : 44
    Points : 64
    Points
    64
    Par défaut
    Bonjour,

    Je n'ai pas le temps de me penché sur les détails de ton problème.
    Néanmoins, si cela peut être utile:
    Pour ajouter un événement à un bouton créer dynamiquement par exemple il faut spécifié:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    AddHandler Button1.Click, AddressOf Btn_Clone_MouseClick
    Sachant que ton Button1 est ton bouton dynamique, et que btn_clone_MouseClick est une sub que tu as créée au préalable.

    Par exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
                Dim Button1As New Button
                Button1= New Button
     
                Button1.Location = New System.Drawing.Point(12, position_y)
                Button1.Name = "Btn" & i
                Button1.TabIndex = Cpt_Part
     
                AddHandler Button1.Click, AddressOf Btn_Clone_MouseClick
                Me.Controls.Add(Button1)
    Dans ton cas ce serai ajouter click sur le label généré dynamiquement?

    En espérant avoir été d'une quelconque aide.
    Bonne journée.

    Ps: Pol63 a été plus rapide que moi.

  4. #4
    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
    Citation Envoyé par Chapeau_Bas Voir le message
    Ps: Pol63 a été plus rapide que moi.
    de peu apparemment ^^
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 89
    Points : 47
    Points
    47
    Par défaut
    Tout d'abord merci pour vos réponses,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    AddHandler Button1.Click, AddressOf Btn_Clone_MouseClick
    Ok mais cela me renvoi à une fonction qui est Btn_Clone_MouseClick qui elle n'est pas définit à ce jour.

    Mon fichier ini peut et évolue régulièrement, donc mes fonctions aussi car les labels sont nommés en fonctions des valeurs retournées par mon ini.

    J'ai par exemple lbl1_1, lbl1_2
    Je devrais avoir donc lbl1_1_MouseClick pour aller sur la fonction liée.
    Dans ce cas, comment construire mes fonctions dynamiquement.

    Ai-je bien compris ? ou alors pas du tout

    Merci

  6. #6
    Membre du Club Avatar de Chapeau_Bas
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2010
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Décembre 2010
    Messages : 44
    Points : 64
    Points
    64
    Par défaut
    Euh... pas vraiment. ^^

    Btn_Clone_MouseClick c'est une sub générée par un bouton de base par exemple (en double cliquant dessus pour généré l'événement et en le supprimant). Ou alors une sub que tu as générée toi même.

    Le code dans cette sub est fixe. Il y a une seule fonction de click pour tout tes labels.
    Il faut ensuite que tu récupères le label (indiqué par pol63) par le directcast.
    Et en fonction de ce label, tu génères ta liste. Après sa dépend des spécificités de ce que tu veux faire...

    Grossièrement, ton événement click va géré tout les labels de ton fichier ini.
    Après si tel catégorie de label font un événement, et tel catégorie d'autre label font un autre événement, tu peux oui créés plusieurs événements pour plusieurs labels. Tout dépend des spécificités de ton problème...

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 89
    Points : 47
    Points
    47
    Par défaut
    Donc je peux mettre un lbl_dyn1_Click(val1, val2) et les récupérer dans ma fonction générale et faire la soluce select case ou autre

    C'est pas très dynamique car si je change une valeur de mon ini le select case ou autre ne matchera plus snif

    Bon ben si pas d'autre solution, merci pour votre aide à tous

    J'ai réussi à récupérer une variable dans ma fonction par DirectCast(sender, Label).Name

    Je souhaite avec la valeur associé DirectCast(sender, Label).Text (Toto par exemple) mettre Visible à true pour un objet portant le nom Toto

    Et ça ne veut pas

    J'ai contourné le problème et mis mes actions dans la fonction appelée et ça marche, merci encore

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

Discussions similaires

  1. Comment ajouter des séries dans des graphes sur des feuilles variables
    Par Molomarcopolo dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 06/07/2012, 16h26
  2. Liste des évènements sur les objets
    Par hubsm dans le forum Windows Forms
    Réponses: 2
    Dernier message: 30/03/2011, 09h34
  3. Réponses: 3
    Dernier message: 04/02/2010, 11h30
  4. Mettre des textures et des couleurs sur les objets
    Par MaTtaW dans le forum PhysX et APEX
    Réponses: 5
    Dernier message: 31/07/2009, 17h42
  5. Réponses: 17
    Dernier message: 12/04/2007, 15h42

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