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 :

Gestion objet dynamique


Sujet :

VB.NET

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    149
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 149
    Par défaut Gestion objet dynamique
    Bonjour a tous !

    J'ai quelque soucis dans la gestion d'objet dynamique.

    je m'explique en vous donnant un exemple :

    J'ai deux boutons sur mon formulaire, les deux creer depuis la boite a outil.

    Je veux que quand j'appuis sur mon PREMIER bouton, il me creer 50 textbox.

    Ici j'y suis arriver

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Dim Test As New System.Windows.Forms.TextBox
            Incre += 1
     
            Test.Name = "Blabla" & Incre
            Me.Controls.Add(Test)
     
            Test.Text = Test.Name
     
            Test.Location = New Point(10, Incre * 30)
    Maintenant je veux que quand j'appuis sur mon DEUXIEME bouton, la Txtbox3 par exemple ai comme text : "Hello"

    Le hic c'est que si je met dans mon bouton2.click : Test3.text = "Hello"
    Il me dit que ce n'est pas creer...

    Comment je peux faire pour pouvoir le faire ?


    Merci !

  2. #2
    Membre émérite
    Avatar de dkmix
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    619
    Détails du profil
    Informations personnelles :
    Localisation : Jamaïque

    Informations forums :
    Inscription : Septembre 2007
    Messages : 619
    Par défaut
    bonjour,
    quelque chose avec les expressions lambda, comme ceci ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Dim TxtBox3 = Me.Controls.SingleOrDefault(function(txtBox) txtBox.Name = "Blabla3")
    TxtBox3.Text = "Hello"

  3. #3
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 198
    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 198
    Par défaut
    Citation Envoyé par Naografix Voir le message
    Le hic c'est que si je met dans mon bouton2.click : Test3.text = "Hello"
    Il me dit que ce n'est pas creer...
    quand on pose un bouton, vs créé une variable avec le nom qu'on donne au controle
    donc me.button1 est possible
    par contre pour les controles créés pendant l'exécution, la seule variable ici c'est Test
    et une fois sortie de la sub la variable n'existe plus (l'instance existe toujours par contre, pas de soucis)

    le but est donc de pouvoir retrouver l'instance, il y a pour ca plusieurs moyens
    la propriétés controls permet de retrouver un controle en fonction de sa propriété name

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    dim c = leparent.controls("le nom as string du controle qu'on cherche")
    un autre moyens c'est d'avoir un list(of ) en variable privée, ca peut se typer, ca évite donc les directcast
    monlist.add(Test) ' à chaque tour de la boucle d'ajout des controles

    ensuite monlist(i) retourne le controle (attention i de 0 à n-1)

    sinon avec une clé autre qu'un integer indexé pour retrouver un controle c'est de faire un dictionary (Tkey, tControl) à la place d'un list of
    exemple avec string, textbox :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    private _Dico as new dictionary(of string, textbox)
    (...)
    _Dico.add("aa" & i.tostring,Test)
    (...)
    _Dico("aa3").text = "nouveau text"

    autre info liée : pour gérer des évènements sur des controles créés par code il faut utiliser AddHandler instance.nomEvent, addressof NomSub (et removehandler quand on en a plus besoin)
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  4. #4
    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
    bonjour dkmix

    Si tu prends une bonne portion de liquide magique chez le grand druide magix ,tu y arriveras:
    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
     
     
    Public Class Form3
        Dim Incre As Integer
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            Dim Test As New System.Windows.Forms.TextBox
            Incre += 1
     
            Test.Name = "Blabla" & Incre
            Me.Controls.Add(Test)
     
            Test.Text = Test.Name
     
            Test.Location = New Point(10, Incre * 30)
        End Sub
     
        Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
            Dim ctl As Control = Me
            While ctl IsNot Nothing
                If TypeOf (ctl) Is TextBox Then
                    Select Case ctl.Name
                        Case "Blabla1"
                            ctl.Text = "hello1"
                        Case "Blabla2"
                            ctl.Text = "hello2"
                        Case "Blabla3"
                            ctl.Text = "hello3"
                    End Select
     
                End If
                ctl = Me.GetNextControl(ctl, True)
            End While
     
        End Sub
    End Class
    bon code...

  5. #5
    Membre émérite
    Avatar de dkmix
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    619
    Détails du profil
    Informations personnelles :
    Localisation : Jamaïque

    Informations forums :
    Inscription : Septembre 2007
    Messages : 619
    Par défaut

    Si tu prends une bonne portion de liquide magique chez le grand druide magix ,tu y arriveras:
    Pas besoin du druide magix, j'ai oublié la méthode "OfType"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Dim TxtBox3 = Me.Controls.OfType(Of TextBox).SingleOrDefault(function(txtBox) txtBox.Name = "Blabla3")
    TxtBox3.Text = "Hello"

Discussions similaires

  1. [IDE] Borland C++ | Gestion d'objet dynamique
    Par Arameya dans le forum C++Builder
    Réponses: 1
    Dernier message: 03/11/2011, 09h23
  2. Réponses: 1
    Dernier message: 30/09/2011, 14h14
  3. gestion d'une collection d'objets dynamiques
    Par SpaceFrog dans le forum VB 6 et antérieur
    Réponses: 9
    Dernier message: 24/03/2009, 10h13
  4. gestion des évènements sur objets dynamiques
    Par boss_gama dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 11/03/2009, 11h50
  5. Objets dynamiques, gestion d'événements et collection
    Par Alfador dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 04/06/2007, 14h34

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