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

Windows Forms Discussion :

[VB.NET]Comment identifier contrôles générés dynamiquement?


Sujet :

Windows Forms

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté Avatar de toniolol
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Juin 2005
    Messages
    281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 281
    Par défaut [VB.NET]Comment identifier contrôles générés dynamiquement?
    Bonjour,
    j'essaye de faire la chose suivante :
    lors d'un évènement je parcours un dataset, dès que certaines lignes correspondent à ce que je cherche je cré une nouvelle instance d'un objet.
    Le problèmle est que je suis obligé de l'appeler de la même façon et je ne m'en sort pas.
    J'aimerai faire quelque chose du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim Bus & numero as new button
    Est-ce possible ?
    Si oui est-ce accessible à un débutant ?
    Merci d'avance.

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 92
    Par défaut
    tu peux faire un tableau ou bien une collection d'objet

  3. #3
    Membre expérimenté Avatar de toniolol
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Juin 2005
    Messages
    281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 281
    Par défaut
    Heu...
    Peut-tu m'en dire plus s'il te plait ?

  4. #4
    Membre expérimenté Avatar de toniolol
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Juin 2005
    Messages
    281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 281
    Par défaut
    Bonjour,
    en fait je ne sais pas si je me suis bien exprimé....
    J'aimerai créer dynamiquement des boutons ayant pour nom des données que je reçois de ma bdd.
    Par exemple bus12345, bus 98765....
    Merci d'avance.

    Edit :
    Dans ce post, Neguib nous dit :
    Arrow cette question est régulièrement posée par des debutant ne maitrisant pas encore la conception 'Objet'. Sur le principe, dans 99.999% des cas cela ne se conçoit même plus en 'Objet'; Puisque là tu veux à tout prix agir non pas sur l'instance elle même mais uniquement sur son adresse mémoire. Contente toi d'utiliser la propriété Name du contrôle. Ensuite, il te reste par exemple à considerer les contrôles comme un ensemble d'objets faisant partie d'une collection ici représentée par Form.Controls.
    Cherche un peu sur le forum, j'ai déjà donné une méthode qui permet de retrouver un contrôle dans cette collection à partir de son type(exemple: Label ou TextBox) et par son .Name
    je vois en gros où il veut en venir mais je n'arrive pas, une fois mes objets crées à les différencier l'un de l'autre...

    En gros mon code est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     bus = New Button
    pbxGeneral.Controls.Add(bus)
    AddHandler bus.Click, AddressOf BusClick
    With bus
       .Name = "bus" & CType(ligne(1), String)
    ...
    End With
    Le problèmes est que je n'arrive pas à trouver si mon objet existe déjà, faut-il le mettre dans une arraylist ou quelque chose du genre ?
    Merci d'avance.

  5. #5
    Membre expérimenté Avatar de del-dongo
    Inscrit en
    Mai 2003
    Messages
    147
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 147
    Par défaut
    tu peux procéder de 2 manières :
    soit itérer sur la collection de controls de ta Form et vérifier que ton control existe déja (en c#)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    foreach(Control c in myForm.Controls)
    {
      if(c.Name == ("bus" + Convert.ToString(ligne(1)) )
          return true;
    }
    Mais cela pose des problèmes de récursivité car si tes controls sant ajoutés à un panel alors il te faudra itérer sur les controls de ton panel, et ainsi de suite
    Une solution plus propre, est de créer une hashtable dans laquelle tu insère en clé le nom de ton control, et en valeur le control lui même (et ceci en même temps que tu l'insère sur la form), il ne te reste qu'à tester que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    if(myHashTable["bus" & CType(ligne(1), String)] != null)
      return true;
    Voila j'espère avoir été assez clair...

  6. #6
    Expert confirmé
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 65
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Par défaut
    Arf cher toniolol

    Citation Envoyé par toniolol
    je vois en gros où il veut en venir mais je n'arrive pas, une fois mes objets crées à les différencier l'un de l'autre...
    En gros mon code est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    bus = New Button
    pbxGeneral.Controls.Add(bus)
    AddHandler bus.Click, AddressOf BusClick
    With bus
       .Name = "bus" & CType(ligne(1), String)
    ...
    End With
    Le problèmes est que je n'arrive pas à trouver si mon objet existe déjà, faut-il le mettre dans une arraylist ou quelque chose du genre ?
    Merci d'avance.
    Tout d'abord il y a une petite approximation dans ton code
    Preferes ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Private Sub CreateButton(ByVal name As String)
       Dim b As New Button()
       With b
         //initialiser ici toutes les propriétés d'affichage
         .Name = name
         AddHandler .Click, AddressOf Me.BusClick
       End With
       Me.Controls.Add(b)
    End Sub
    Ensuite tu as besoin de quelquechose de ce type si tu veux recupérer le control
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Private Function GetButtonByName(ByVal name As String) As Button
      Dim b As Button
      For each c As Control in Me.Controls
        If (c Is Button) AndAlso (c.Name.Equals(name) Then b = Ctype(c, Button)
      Next
      Return b
    End Function
    Sinon aucun souci pour la méthode
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Private Sub BusClick(ByVal sender, EventArgs e)
      Select Case Ctype(sender, Control).Name
        Case "busTruc":
        Case "busMachin"
        '...
      End Select
    End Sub

  7. #7
    Membre expérimenté Avatar de toniolol
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Juin 2005
    Messages
    281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 281
    Par défaut
    Merci neguib,
    J'ai à peu près suivi ce qui précède...
    Au final j'ai donc créé une ArrayList qui stocke mes objets pour pouvoir les parcourir plus vite car j'ai d'autres boutons dans mon container.
    Je vais mettre de l'ordre dans le code comme tu me l'as montré !
    Encore merci

  8. #8
    Expert confirmé
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 65
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Par défaut
    Citation Envoyé par toniolol
    Merci neguib,
    J'ai à peu près suivi ce qui précède...
    Au final j'ai donc créé une ArrayList qui stocke mes objets pour pouvoir les parcourir plus vite car j'ai d'autres boutons dans mon container.
    Je vais mettre de l'ordre dans le code comme tu me l'as montré !
    Encore merci
    Pourquoi ajouter une collection (en plus non typée > ArrayList) qui va alourdir ton appli ?
    Quel est le container spécifique dont tu parles stp ?

  9. #9
    Membre expérimenté Avatar de toniolol
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Juin 2005
    Messages
    281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 281
    Par défaut
    En fait je parcourais mon image appartient donc à un PictureBox, ce dernier étant docké dans une panel, je n'ai donc qu'à parcourir mon pictureBox.
    Je viens de supprimer cet ArrayList inutile
    Merci !

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

Discussions similaires

  1. Réponses: 9
    Dernier message: 20/03/2008, 18h19
  2. [C# / ASP.NET] Comment creer une listbox dynamique
    Par arioule dans le forum ASP.NET
    Réponses: 2
    Dernier message: 06/12/2006, 22h03
  3. Réponses: 2
    Dernier message: 05/05/2006, 16h44
  4. [CF][VB.NET] Comment identifier un pocket PC ?
    Par RiiiDD dans le forum Windows Mobile
    Réponses: 2
    Dernier message: 05/04/2006, 13h50
  5. [VB.Net] Comment créer dynamiquement un contrôle bouton ?
    Par robert.michel9 dans le forum Windows Forms
    Réponses: 1
    Dernier message: 19/01/2006, 13h49

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