Créer un group de control, comme en vb6

Soyez le premier à donner votre avis sur cette source.

Snippet vu 10 050 fois - Téléchargée 28 fois

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

Ajouter un commentaire

Commentaires

Messages postés
2336
Date d'inscription
samedi 14 juillet 2001
Statut
Membre
Dernière intervention
5 mai 2009
5
l'idéal est quand même de les inséré dans un tableau et encore mieux dans un générique sous le framework 2.0 et +
Messages postés
64
Date d'inscription
mercredi 4 avril 2007
Statut
Membre
Dernière intervention
6 juin 2007

salut salut!
NoKurzTif autant que je sache, seul les controls sont indexés, donc ta méthode ne marche pas avec des objets, comme dans VB6, toujours étant ,merci beaucoup à ELWINGIL ,car sans indexage c'est pas très souple..++
Messages postés
2
Date d'inscription
samedi 22 janvier 2005
Statut
Membre
Dernière intervention
13 novembre 2006

Slt,
Je voulais dire 2 choses eu égard à ce que j'ai lu plus haut :
1_) les contrôles disposent d'index
2_) y'a pas de problèmes pour en masquer certains

En fait les contrôles disposent d'index qui sont initialisés à la création.
Le dernier contrôle créé a l'index zéro ! Il faut juste faire gaffe lors de la création et du placement des contrôles, mais ensuite, on peut utiliser une boucle for each.. Ouais, ça c'est vraiment chiant par rapport à VB6 !!!
Il est aussi possible de gérer en utilisant les propriétés des collections (en l'occurence, collection de contrôles !)

Voici à titre d'exemple un code qui affiche les vendredis de chaque mois :
Private Sub RefreshChoiseDate()
Dim i As Integer, j As Integer
Dim maxMonthCtrl As Integer = 6
Dim targetMonth As Byte = CByte(Month(TargetDate))
Dim tempoDate As Date
Dim firstDate As Date = DateAdd(DateInterval.Month, -maxMonthCtrl + 1, TargetDate)
Dim firstMonth As Integer = Month(firstDate)
Dim firstYear As Integer = Year(firstDate)
firstDate = DateAndTime.DateSerial(firstYear, firstMonth, 1)
firstDate = CDate(SearchFriday(firstDate))
i 0 : j -1
For Each ctrl As Control In gb1.Controls
tempoDate = DateAdd(DateInterval.Day, i * 7, firstDate)
i i + 1 : j j + 1
ctrl.Text = tempoDate.ToString("dd/MM")
If DateAndTime.Day(tempoDate) > 3 And (j Mod 5) 0 Then ctrl.Text "" : i = i - 1
If DateAndTime.Day(tempoDate) < 25 And (j Mod 5) 4 Then ctrl.Text "" : i = i - 1
If DateValue(CStr(tempoDate)) = DateValue(CStr(TargetDate)) Then ctrl.Select()
Next ctrl
For Each ctrl As Control In gb1.Controls
ctrl.Visible CBool(IIf(ctrl.Text "", False, True))
Next
Me.Refresh()
End Sub
Messages postés
55
Date d'inscription
dimanche 15 août 2004
Statut
Membre
Dernière intervention
20 juin 2005

Bonjour,

pour commencer cette source et les commentaires associés sont tres bien Merci beaucoup.

je voudrais savoir queqleu chose.

sur un formulaire windows j'ai disont 10 listbox (+ ou - ca change rien mais prenons 10)

j'aimerais que losque je clique sur n'importe laquelle de ces listbox un formulaire apparaisse bon je sais que pour faire apparaitre le formulaire c'est : nomduformulaire.show la j'ai pas de probleme mais mon probleme ce situe dans le fait que je voudrais pour cela acceder a une instructioen de type:

private sub listbox_doubleclick(.....................)

nomduformulaire.show
end sub

hors si je construit comme indiqué plus haut j'accede a chacune des listbox par a l'ensembe

merci de votre aide
Messages postés
2336
Date d'inscription
samedi 14 juillet 2001
Statut
Membre
Dernière intervention
5 mai 2009
5
c'est pareil, mais j'avou que maintenant, je fais pareil que elwingil, bien que des fois je fais comme ma source

ça dépend vraiment du code que je fais. je prend même les 2 desfois

par exemple, je me fabrique une structure qui contient pleins d,info et qui contient le lien vers le control qui est en tableau. Comme ça, je pert jamais mes control dans un environnement à 100% dynamique
Afficher les 19 commentaires

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.