cs_bny
Messages postés24Date d'inscriptionlundi 6 mars 2006StatutMembreDernière intervention31 mai 2010
-
17 janv. 2007 à 20:59
cs_bny
Messages postés24Date d'inscriptionlundi 6 mars 2006StatutMembreDernière intervention31 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é.
cs_bny
Messages postés24Date d'inscriptionlundi 6 mars 2006StatutMembreDernière intervention31 mai 2010 18 janv. 2007 à 19:51
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
cs_bny
Messages postés24Date d'inscriptionlundi 6 mars 2006StatutMembreDernière intervention31 mai 2010 18 janv. 2007 à 14:23
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.