Créer un group de control, comme en vb6

Contenu du snippet

un des plus gros problème de VB.Net c'est la disparution des Index sur les objects. En fait, c'était une des options que j'utilisais le plus dans Vb6. J'ai créé un assemblant d'index, en tout cas dans le code.

je peux toujours pas doner d,exemple, mais c,est très simple à comprendre le principle. Ceci marche aussi pour les control personnalisé

Source / Exemple :


'exemple pour un calendrier
'J'ai 42 case pour mes jours du mois (7 jours semaines * 6 semaines = 42 jours)

'Donc je me crée un tableau d'entier 
Dim Ljour(41) As Integer 
'qui sera accessible partout dans le projet

'ensuite à la fin de Private Sub InitializeComponent(), appeler une fonction qui va remplir le tableau. (C'est le buot chiant du code, puisqu'il faut le faire pour tout les item)

'*********************************************

Me.Ljour(0) = index(Me.Ljour8.Name)
        Me.Ljour(1) = index(Me.Ljour9.Name)
        Me.Ljour(2) = index(Me.Ljour10.Name)
        Me.Ljour(3) = index(Me.Ljour11.Name)
        Me.Ljour(4) = index(Me.Ljour12.Name)
        Me.Ljour(5) = index(Me.Ljour13.Name)
        Me.Ljour(6) = index(Me.Ljour14.Name)
        Me.Ljour(7) = index(Me.Ljour15.Name)
        Me.Ljour(8) = index(Me.Ljour16.Name)
        Me.Ljour(9) = index(Me.Ljour17.Name)
'........

'*********************************************

'La fonction index va rechercher dans la form les object pour trouver leur index, c'est très rapide, ça ralentie vramient très peux une application

    Public Function index(ByVal nom As String) As Integer
        Static i As Integer
        For i = 0 To Me.Controls.Count - 1
            If nom = Me.Controls(i).Name Then
                Exit For
            End If
        Next i
        Return i
    End Function

'*********************************************

'ensuite, quand on veux un object indexé, il faut simplement faire ceci
Me.Controls(Ljour(Index)).Text

'Desfois, pour avoir certaine fonctionnalité, mieux vaut ajouter ceci, pour lui définir le type de control
CType(Me.Controls(Ljour(i)), Label).BorderStyle = 1

Conclusion :


BUG !!!!!!
il y a un bug en VB.net, quand on met un item visible à false, les index sont changer. donc dans la forme, faudra arrêter d'utiliser visible = false

quand même susi pas bête nno plus, voici un remplacent :-), au lieu de le mettre invisible, ça le met hors vision vers la droite, puis ça le remplace quand on le remet visible

Private Sub visible2(ByRef control As Control, ByVal valeur As Boolean)
If valeur Then
If control.Left > Me.Width Then
control.Left -= Me.Width
End If
Else
If control.Left <= Me.Width Then
control.Left += Me.Width
End If
End If
End Sub

A voir également

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.