Modification de contrôle créé dynamiquement [Résolu]

Messages postés
24
Date d'inscription
lundi 6 mars 2006
Dernière intervention
31 mai 2010
- - Dernière réponse : cs_bny
Messages postés
24
Date d'inscription
lundi 6 mars 2006
Dernière intervention
31 mai 2010
- 18 janv. 2007 à 19:51
Voici mon problème : Je crée des contrôles de façon dynamique dans mon programme cependant je ne sais pas comment faire pour pouvoir les modifier après leur création (à l'aide d'un bouton par exemple).  Je vais vous donner un exemple de création dynamique de checkbox...mais après la création je ne suis pas capable de créer un bouton pour les cocher toutes.  Le code est en Visual Basic Compact Framework...je ne sais pas si cela pose un problème, si vous avez la solution en VB .NET elle sera la bienvenue.

'Fonction qui affiche les Checkboxes de façon dynamique
    Public Sub afficheCheckBoxes(ByVal nb As Integer)
        'Déclaration des variables de positionnement des windows form        Dim YCB As Integer 6, XCB As Integer 2
        For nb = 1 To nb
            'Création de la liste des élèves en checkbox
            Dim cbeleve As New Windows.Forms.CheckBox()
            cbeleve.Size = New System.Drawing.Size(115, 15)
            cbeleve.Location = New System.Drawing.Point(XCB, YCB)          
            cbeleve.Text = "eleve" & nb
            Panel.Controls.Add(cbeleve)          
            YCB += 17
        Next
    End Sub

'Fonction pour cocher tous les checkboxes élèves
    Public Sub selectAll(ByVal nb As Integer)
        Dim cpt As Integer
        For cpt = 1 To nb
                cbeleve.checked = true
        Next
    End Sub

Il ne vois pas le cbeleve dans ma fonction selectAll...je sais que c'est normal j'ai aussi essayé de le mettre en variable globale mais sans succès.  Alors si vous avez une solution ce serait grandement apprécié.
Afficher la suite 

Votre réponse

3 réponses

Meilleure réponse
Messages postés
24
Date d'inscription
lundi 6 mars 2006
Dernière intervention
31 mai 2010
3
Merci
Yay, j'ai trouvé la solution par moi-même finalement....pour ceux que ça pourrait intéresser je vais vous l'expliquer.  Il faut se créer une nouvelle classe qui représente un tableau de CheckBox ainsi on peut gérer tous les checkbox créés.  Voici le code de ma classe :

Public Class CheckBoxArray
    Inherits System.Collections.CollectionBase

'Mon host est un panel, si vous voulez créer le CheckBox sur un Form
'n'oubliez pas de le spécifier
    Private ReadOnly HostPanel As System.Windows.Forms.Panel

'Pour créer un nouveau CheckBox dans le tableau
    Public Sub New(ByVal host As System.Windows.Forms.Panel)
        HostPanel = host
        Me.AddNewCheckBox()
    End Sub

    Default Public ReadOnly Property Item(ByVal Index As Integer) As System.Windows.Forms.CheckBox
        Get
            Return CType(Me.List.Item(Index), System.Windows.Forms.CheckBox)
        End Get
    End Property

    Public Function AddNewCheckBox() As System.Windows.Forms.CheckBox
        ' Crée un instance de classe de CheckBox
        Dim aCheckBox As New System.Windows.Forms.CheckBox()
        ' Met le Checkbox dans la collection interne
        Me.List.Add(aCheckBox)
        ' Ajoute le checkbox dans le panel voulu utilisant le nom du panel
        HostPanel.Controls.Add(aCheckBox)
        ' Propriétés initiales du CheckBox
        aCheckBox.Size = New System.Drawing.Size(115, 15)
        aCheckBox.Font = New System.Drawing.Font(Drawing.FontFamily.GenericSansSerif, 8, Drawing.FontStyle.Regular)
        'Pour aligner les CheckBox
        If Count = 1 Then
            aCheckBox.Top = 6
        Else
            aCheckBox.Top = ((Count - 1) * 17) + 6
        End If
        aCheckBox.Left = 3
        aCheckBox.Tag = Me.Count
        aCheckBox.Text = "Eleve " & Me.Count.ToString
        Return aCheckBox
    End Function

    'Fonction pour retirer un CheckBox en utilisant la position de celui-ci
    'dans le tableau de CheckBox...peut être utile
    Public Sub Remove(ByVal nb As Integer)
        ' Regarde s'il y a un checkbox à effacer
        If Me.Count > 0 Then
            'Efface le CheckBox Voulu sur le form ainsi que dans la collection
            HostPanel.Controls.Remove(Me(nb - 1))
            Me.List.RemoveAt(nb - 1)
        End If
    End Sub

End Class

Et voici le code pour en créer comme bon vous semble :

'Fonction qui affiche le Chat de façon dynamique
    Public Sub afficheCB(ByVal nb As Integer)
        'Déclaration de mon tableau de CheckBox
        cbeleve = New CheckBoxArray(PanelChat)
        For nb = 1 To nb
            'Fonction qui met un nouveau CheckBox
            cbeleve.AddNewCheckBox()
        Next
    End Sub

Et la fonction pour tous les cocher :

'Fonction pour cocher tous les checkboxes élèves
    Public Sub selectAll(ByVal nb As Integer)
        For cpt As Integer = 0 To nb
            cbeleve(cpt).Checked = True
        Next
    End Sub

Voici le site où j'ai trouvé ma solution :
http://msdn2.microsoft.com/en-us/library/aa289500(VS.71).aspx

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 97 internautes nous ont dit merci ce mois-ci

Commenter la réponse de cs_bny
Messages postés
4530
Date d'inscription
dimanche 29 septembre 2002
Dernière intervention
23 décembre 2014
0
Merci
normal Dim cbeleve As New Windows.Forms.CheckBox() crée UNE seule instance d'objet ! Pour faire mieu fait :

public x as new collection
...
x.add cbeleve
...
for i as integer = 1 to c.count
   x(i).checked=true
next

@+

E.B.
Commenter la réponse de cs_EBArtSoft
Messages postés
24
Date d'inscription
lundi 6 mars 2006
Dernière intervention
31 mai 2010
0
Merci
J'ai testé ta solution avec un programme VB .NET et elle marche très bien, cependant mon programme est en VB Compact Framework et celui-ci m'envoie l'erreur suivante lorsque j'essaie ta solution : "La version ciblée du .NET Compact Framework ne prend pas en charge la liaison tardive."...je croyais que la solution .NET marcherais sur le CF, alors s'il y en a qui connaissent une solution pour VB CF elle serait grandement appréciée.

Merci tout de même EBArtSoft, je saurai comment faire en .NET c'est toujours pratique.
Commenter la réponse de cs_bny

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.