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 objets infiniment à la demande et les modifier


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2015
    Messages
    128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

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

    Informations forums :
    Inscription : Juillet 2015
    Messages : 128
    Par défaut Ajouter des objets infiniment à la demande et les modifier
    (j'été entrain d'écrire un message plus détaillé sa a beugué et tout effacé, je vais faire plus simple donc )


    ok alors, on a une form vb.net simple, avec un bouton à chaque fois qu'on appuie dessus ca va ajouter un bouton à la form

    par exemple j'appuie 10 fois à chaque, ca va ajouter un bouton qui n'est pas déja déclaré

    en sachant que le :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim buton1 as new button
    (ca utilise l'UI d'un bouton mais on peut pas l'afficher sur la form)

    puis il faut que je puisse pouvoir modifier le boutton, après qu'il a été ajouté, par example je remplace le texte du bouton2 (qui a été déclaré après que j'ai appuyé sur le bouton1)

    c'est vraiment très important j'en ai besoin
    merci d'avance (pour plus de détail je suis là)

  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
    quand on veut garder une instance accessible, on la met dans une variable (type variable sur la classe du form)
    quand on eut garder des instances sans en connaitre le nombre, on utilise une collection (un tableau à une dimension amélioré)
    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
     
    private _buttons as new list(of button) ' collection qui contiendra tous les boutons ajoutés dynamiquement, _boutons(0) étant le 1er ajouté 
     
     
    public sub buttonAddbutton_Click (sender as object, e as system.Eventargs) handles buttonAddbutton.Click
      dim b as new button ' instanciation d'un nouveau bouton
      _buttons.Add(b) ' ajout de l'instance dans la collection pour pouvoir la retrouver plus tard
      me.flowlayoutpanel1.controls.Add(b) ' ajout du controle sur le form (ici sur un type de panel qui gère le positionnement, mais tu peux faire me.controls.Add(b) et gérer toi même .top et .left)
      addhandler b.click, addressof unbuttonClick ' ici c'est pour s'abonner à un évènement de l'instance
      me.text = _boutons.count.tostring & " boutons ajoutés" ' pour illustrer le .count
    end sub
     
    private sub unbuttonClick(sender as object, e as system.Eventargs) ' si on a créé plusieurs boutons, le click de tous les boutons ramène ici
       dim boutoncliqué = directcast(sender, button) ' donc on récupère celui qui a été cliqué dans sender
       ' code
    end sub
    je t'ai mis tous les concepts utiles, c'est à approfondir en testant ...
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  3. #3
    Membre très actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2015
    Messages
    128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

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

    Informations forums :
    Inscription : Juillet 2015
    Messages : 128
    Par défaut
    oui sa aide mais le problème est que chaque bouton, à l'appuie doit exécuter :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    OID_execute("le nom du bouton" & "ID")
    après la sub s'occupe du reste

    puis par exemple pour un "webbrowser" sa doit exécuter sa quand la page finit de charger ..

    et tant qu'on y est sa :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Dim btn1 as new button
    me.controls.Add(btn1)
    btn1.location.x = 0
    btn1.location.y = 0
    sa marcherai aussi ?

    j'ai un peu réfléchi sur ta dernière réponse vous m'avez dit, tous les boutons exécuteront le meme code, et si juste dans le byVal on rajoute un (i) qui aurai le nom du bouton appuyé et quand on appuie sa exécuterai une function ou une sub, qui exécuterai le code du bouton qu'il faut par if elseif .. non ?

  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
    un évènement a une signature donnée (nombre et type des paramètres), on ne peut pas en rajouter

    par contre comme je l'ai dit sender contient le bouton cliqué
    chaque control a une propriété tag dans laquelle on met ce qu'on veut
    tu peux donc faire b.tag = unnombreincrémenté

    et dans l'event lire le tag pour exécuter quelque chose qui sera différent pour chaque bouton


    pour le .location, c'est ce que je disais, moi j'ai mis dans un flowlayoutpanel parce que c'est 100x plus pratique (tu n'as pas essayé sinon tu en serais convaincu) mais tu peux définir la location comme tu le souhaites
    par contre .location.x et .location.y sont "readonly" (parce que ...)
    donc soit définir .location, soit définir .top et .left
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  5. #5
    Membre très actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2015
    Messages
    128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

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

    Informations forums :
    Inscription : Juillet 2015
    Messages : 128
    Par défaut
    bah ok merci :p

  6. #6
    Membre très actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2015
    Messages
    128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

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

    Informations forums :
    Inscription : Juillet 2015
    Messages : 128
    Par défaut
    Citation Envoyé par Pol63 Voir le message
    un évènement a une signature donnée (nombre et type des paramètres), on ne peut pas en rajouter

    par contre comme je l'ai dit sender contient le bouton cliqué
    chaque control a une propriété tag dans laquelle on met ce qu'on veut
    tu peux donc faire b.tag = unnombreincrémenté

    et dans l'event lire le tag pour exécuter quelque chose qui sera différent pour chaque bouton


    pour le .location, c'est ce que je disais, moi j'ai mis dans un flowlayoutpanel parce que c'est 100x plus pratique (tu n'as pas essayé sinon tu en serais convaincu) mais tu peux définir la location comme tu le souhaites
    par contre .location.x et .location.y sont "readonly" (parce que ...)
    donc soit définir .location, soit définir .top et .left
    je vais utiliser le code maintenant et je me rend compte que je c'est tellement facile que j'aurai pu le faire seul, bref, vous avez dit location.x et .y sont "readonly" mais c'est facile de les modifier comme ça : .location = new point(x, y) ' juste au cas ou quelqu’un va utiliser le code

    bonjour, alors sur le meme sujet ce que je veut faire c'est n'importe l'event que éxécute n'importe quel boutton sa va executer une sub qui fera ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    'Je dois récupérer le nom de l'Event puis faire ça :
    execute("bouton : " & (le nom de l'objet) & "_" & (le nom de l'event)
    'pour le nom de l'objet facile le probleme c'est le nom de l'event par example récupérer : TextChanged

  7. #7
    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
    rien de spécialement prévu pour ça je pense
    après il y a du bricolage possible

    quand une sub est liée à plusieurs types d'event, e est à déclarer as System.EventArgs
    mais l'instance est bien du type prévu, et pour certains events c'est un type dérivé qui fournit, donc tu peux tester le type de e (enfin pour click par exemple c'est un eventargs simple)

    après il reste de regarder dans la pile des appels l'appelant si ca vient de textbox.ontextchanged ou autre
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 19/08/2011, 13h09
  2. Réponses: 0
    Dernier message: 06/05/2011, 05h56
  3. Ajouter des objets à une liste multiprocessing.Manager.list()
    Par thepepper dans le forum Général Python
    Réponses: 4
    Dernier message: 06/07/2010, 14h27
  4. Ajouter des input file sur demande
    Par vva dans le forum Général JavaScript
    Réponses: 16
    Dernier message: 30/09/2008, 11h07
  5. [POO] Ajouter des objets à un objet
    Par poussinphp dans le forum Langage
    Réponses: 2
    Dernier message: 15/02/2008, 21h41

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