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 :

générer dynamiquement des radiobuttons dams un groupbox ?


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre chevronné
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2011
    Messages
    453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

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

    Informations forums :
    Inscription : Mars 2011
    Messages : 453
    Par défaut générer dynamiquement des radiobuttons dams un groupbox ?
    Bonjour tout le monde,

    J'essaye de (comme le dit le titre) générer des radiobuttons en fonction du nombre de lignes ramenées par une requête :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    For Each l As Langue In listeLangue
                Dim rb As New RadioButton
                rb.Text = l.Langue_LIB
                GroupBoxChoixLangue.Controls.Add(rb)
            Next
    Normalement je devrais avoir 4 radiobuttons mais le problème c'est que VS me les mets tous en haut à gauche de la groupBox et les uns sur les autres qui plus est !



    Si quelqu'un pouvait m'expliquer la subtilité se serait sympa

  2. #2
    Membre expérimenté
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Sarthe (Pays de la Loire)

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

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Par défaut
    Tu dois gérer la position des contrôles au sein de leur parent, en utilisant la propriété Location.

    Tu trouveras un exemple ici : http://msdn.microsoft.com/fr-fr/libr....location.aspx

  3. #3
    Membre chevronné
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2011
    Messages
    453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

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

    Informations forums :
    Inscription : Mars 2011
    Messages : 453
    Par défaut
    Donc si je comprends bien, je dois définir la localisation du premier radiobutton puis dire "tu mets le suivant à tant du précédent" ?

    C'est ça ? J'ai bon ?


    Edit :

    C'est bon ça marche impeccable, merci StormimOn

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Dim i As Integer = 0
            For Each l As Langue In listeLangue
                Dim rb As New RadioButton
                rb.Text = l.Langue_LIB
                rb.Location = New Point(10, 10 + i)
                GroupBoxChoixLangue.Controls.Add(rb)
                i += 20
            Next
    résultat :


  4. #4
    Membre expérimenté
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Sarthe (Pays de la Loire)

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

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Par défaut
    N'étant pas sûr de ce que tu entends par "tu mets le suivant à tant du précédent" on va dire peut-être

    Tu dois définir la position de chaque contrôle au sein du container parent, c'est à ça que sert la propriété Location. Donc tu définis le point de départ (position du premier RadioButton) et pour les suivants tu devras incrémenter la position de manière à ce qu'ils soient correctement présentés.

    Edit : il faudra que j'apprenne à écrire plus vite pour ne pas poster trop tard ^^

  5. #5
    Membre chevronné
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2011
    Messages
    453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

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

    Informations forums :
    Inscription : Mars 2011
    Messages : 453
    Par défaut Gérer les évènements des radiobuttons
    Ok alors maintenant nouvelle question :

    Comment je fais pour détecter le checkChange sur la groupBox ? Pour l'instant j'ai fait ça :

    Déclaration de variable :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Friend WithEvents rb As RadioButton
    Au load de mon Form :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Dim i As Integer = 0
            For Each l As Langue In listeLangue
                rb = New RadioButton
                rb.Text = l.Langue_LIB
                rb.Name = l.Langue_ID
                rb.Location = New Point(10, 10 + i)
                GroupBoxChoixLangue.Controls.Add(rb)
                i += 20
            Next
            CType(GroupBoxChoixLangue.Controls.Item(0), RadioButton).Checked = True
    Mon évènement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Private Sub rb_CheckedChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles rb.CheckedChanged
            DGVNouveautes.Rows.Clear()
            For Each f As FicheTracteur In listeNouveautes
                If f.Langue_ID.ToString Is rb.Name Then
                    Dim split As String() = f.PDF_Url.Split(New [Char]() {"\"c, "_"c, "."c})
                    Dim caract As String = CtrlOngletNouveaute.getCaract(f.Caract_ID)
                    DGVNouveautes.Rows.Add(f, f.Date_Creation, split(19), split(7), split(8), split(9), split(18), caract)
                End If
            Next
        End Sub
    Le souci c'est que comme je me sers d'une seule variable pour générer mes radiobuttons, VS ne voit que le dernier crée, l'évènement ne se déclenche donc que sur le dernier et pas sur les autres...

  6. #6
    Membre expérimenté
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Sarthe (Pays de la Loire)

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

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Par défaut
    A priori VB offre une possibilité en plus par rapport à C# pour s'abonner aux événements et c'est ce qui pose problème dans ce cas de figure. Encore une bonne raison de préférer C#

    Abonne toi "normalement" à l'événement dans la boucle et ça ira mieux je pense.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    For Each l As Langue In listeLangue
        rb = New RadioButton
        rb.Text = l.Langue_LIB
        rb.Name = l.Langue_ID
        rb.Location = New Point(10, 10 + i)
        GroupBoxChoixLangue.Controls.Add(rb)
        AddHandler rb.Checked, AddressOf rb_CheckedChanged
        i += 20
    Next
    Et enlève le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Handles rb.CheckedChanged
    de la méthode abonnée pour arriver à quelque chose comme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Private Sub rb_CheckedChanged(ByVal sender As Object, ByVal e As System.EventArgs) 
            RadioButton rb = CType(sender, RadioButton)
            DGVNouveautes.Rows.Clear()
            For Each f As FicheTracteur In listeNouveautes
                If f.Langue_ID.ToString Is rb.Name Then
                    Dim split As String() = f.PDF_Url.Split(New [Char]() {"\"c, "_"c, "."c})
                    Dim caract As String = CtrlOngletNouveaute.getCaract(f.Caract_ID)
                    DGVNouveautes.Rows.Add(f, f.Date_Creation, split(19), split(7), split(8), split(9), split(18), caract)
                End If
            Next
    End Sub
    Comme tu le vois, on caste le sender en RadioButton. sender correspond à l'objet qui déclenche l'événement, et donc le RadioButton coché/décoché dans ce cas de figure. Il faudrait d'ailleurs que tu testes dans l'événement l'état du Checked de ton RadioButton, enfin je pense

    Si ça ne fonctionne toujours pas on attendra quelqu'un qui connait mieux VB ^^

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

Discussions similaires

  1. [Dojo] IE, générer dynamiquement des RadioButton
    Par Tavarez59 dans le forum Bibliothèques & Frameworks
    Réponses: 2
    Dernier message: 20/06/2009, 00h02
  2. Réponses: 2
    Dernier message: 27/04/2007, 14h03
  3. Réponses: 7
    Dernier message: 30/05/2006, 11h55
  4. [DTS]générer dynamiquement des tables Postgres 8.0
    Par CetTer dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 08/10/2005, 11h35
  5. Réponses: 2
    Dernier message: 31/08/2002, 15h00

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