Meilleur auteur de réponses
Ordre des objets dans un formulaire

Question
-
Bonjour à tous,
J’ai un petit problème dans un formulaire.
J’ai différents objets sur ce formulare et 12 combobox. En VB6 je pouvais les indexer, mais cette fonction a été abolie (je me demande pourquoi) en VB-NET.
J’ai écrit la procédure suiante :
Private Sub FindCombo(ByVal frmForm As Form)
Dim ctlControl As Object
Dim lsInd as string = "*"
On Error Resume Next
For Each ctlControl In frmForm.Controls
If TypeOf ctlControl Is ComboBox Then
If Len(Trim(ctlControl.Text)) > 0 Then
lsInd = lsInd & ctlControl.Text + "*"
End If
End If
Next ctlControl
End Sub
Toutefois les contrôles sont lus à partir du dernier. J’ai tout essayé, modifier le noms, les indexes des tabs, etc. mais rien à faire.
C’est embêtant, car pas la suite le programme doit recharger ces combo et le résultat est tout à fat différent de l’original.Qui peut m’expliquer et me donner la solution pour que la lecture des objets se fasse dans la séquence de leur place dans formulaire ?
Merci d’avance
CordialementLuigi
Luigi1936
Réponses
-
Bonsoir Michel.
J'ai trouvé la solution. Pas très propre mais efficace.J'ai édité la forme.designer.vb et j'ai modifié manuellement le load des objets:
Me.Controls.Add(Me.ComboBox1)
Me.Controls.Add(Me.ComboBox2)
Me.Controls.Add(Me.ComboBox3)Et voila, merci encore de votre aide.
Bien Cordialemeent
Luigi
Luigi1936- Marqué comme réponse Alex Petrescu mardi 22 février 2011 14:03
Toutes les réponses
-
Bonsoir,
Alors pour l'explication, la liste des contrôles est remplie au fur et à mesure qu'ils sont ajoutés. Les derniers ajoutés sont donc les premiers de la collection.
Pour changer l'index d'un contrôle de cette collection, il suffit d'utiliser Me.Controls.SetChildIndex(controle, nouvelIndex)
Vous pourrez donc utiliser une procédure afin de changer l'ordre à votre convenance, soit en inversant entièrement l'ordre, soit un précisant quel contrôle doit être à quel index.
N'hésitez pas à poser des questions si un problème subsiste ou quelque chose n'est pas clair. Dans l'autre cas, veuillez indiquer que le problème est résolu. Cordialement.- Proposé comme réponse TroxsaEditor dimanche 20 février 2011 19:10
-
Voici ce que j'ai fait, mais rien ne change
Dim ctlControl As Object
Dim ind As Integer = 1
For Each ctlControl In Me.Controls
If TypeOf ctlControl Is ComboBox Then
Me.Controls.SetChildIndex(ctlControl, ind)
ind = ind + 1
End If
Next ctlControl
Luigi1936 -
-
Bonsoir,
Pas grave :) En fait les index sont "inversés" à savoir l'index 0 placera le contrôle à la toute fin de la collection tandis que l'index "maximum" sera le premier élément.
Essayez :
Dim ctlControl As Object Dim ind As Integer = Me.Controls.Count For Each ctlControl In Me.Controls If TypeOf ctlControl Is ComboBox Then Me.Controls.SetChildIndex(ctlControl, ind) ind = ind - 1 End If Next ctlControl
N'hésitez pas à poser des questions si un problème subsiste ou quelque chose n'est pas clair. Dans l'autre cas, veuillez indiquer que le problème est résolu. Cordialement. -
-
Bonsoir Michel.
J'ai trouvé la solution. Pas très propre mais efficace.J'ai édité la forme.designer.vb et j'ai modifié manuellement le load des objets:
Me.Controls.Add(Me.ComboBox1)
Me.Controls.Add(Me.ComboBox2)
Me.Controls.Add(Me.ComboBox3)Et voila, merci encore de votre aide.
Bien Cordialemeent
Luigi
Luigi1936- Marqué comme réponse Alex Petrescu mardi 22 février 2011 14:03
-
Bonjour Michel,
Je voudrais "profiter" de tes connaissances pour te soumettre un problème.
J'ai trouvé sur le net un code qui je pensais pourrait me permettre de solutionner mon problème.
En fait j'ai un formulaire dans lequel j'ai créé dynamiquement un groupbox et dans lequel j'ai créé dynamiquement des combobox.
Je pensais au départ en adaptant le code ci-dessous pouvoir accèder à mes combobox.
Mais je n'ai pas trouvé les bonnes lignes de code pour accèder à mes combobox alors que pour accèder à mon groupbox il n'y a pas de problème.
Aurais-tu une idée ?
Merci d'avance.
Public Class Form1
Dim Browsers As New System.Collections.Generic.List(Of Label)() ' Collection de labels
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
trouver_label() ' Répertorier tous les labels de la Form dans la collection
End Sub
Sub Label_Text(ByVal Label_Name As String, ByVal Text As String) ' Modifier la propriété Text du Label
For i As Integer = 0 To Browsers.Count - 1 ' Parcours toute la collection
If Browsers(i).Name = Label_Name Then ' Si le nom du label correspond au nom du 1° paramètre
Browsers(i).Text = Text ' On modifie la propriété Text du label avec le 2° paramètre
End If
Next
End Sub
Sub trouver_label() ' Pour trouver tous les labels d'une Form
For Each objet As Object In Me.Controls ' Parcours tous les controls de ta form
If objet.GetType.Name = "Label" Then ' Si c'est un Label
Browsers.Add(objet) ' on le rajoute dans la collection
End If
Next
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
' Lors du clic sur Button1 on appelle la fonction Label_Text
Label_Text("toto", "Salut") ' Après cette fonction, le label 'toto' va afficher 'Salut'
End Sub
End Class