math_gury
Messages postés32Date d'inscriptionvendredi 4 novembre 2005StatutMembreDernière intervention 8 juin 2009
-
25 sept. 2008 à 16:25
cs_Willi
Messages postés2375Date d'inscriptionjeudi 12 juillet 2001StatutModérateurDernière intervention15 décembre 2018
-
27 sept. 2008 à 20:04
Bonjour à tous,
Voici un bout de code :
For Each ctrl In Me.OnglaisPiste.Controls
If TypeOf (ctrl) Is Label Then
ctrl.Location = New Point(PosX, PosY)
c'est tout bête, mais je ne comprends pas pourquoi le Label concerné ne se déplace pas à la position demandée...
Qu'est ce qui peut faire que le contrôle refuse de se déplacer?
Si quelqu'un peut m'aider, ça m'aiderai bien...
cs_Willi
Messages postés2375Date d'inscriptionjeudi 12 juillet 2001StatutModérateurDernière intervention15 décembre 201823 25 sept. 2008 à 16:45
Bonjour,
Ce que tu demandes c'est parmis tout les contrôles présent dans OnglaisPiste ceux qui sont des labels se déplacent à la position x et y.
Hors ici tout les contrôles enfants d'un TabControl (ici OnglaisPiste) sont des contrôles de type TapePage donc aucun onglet la dedans.
Si tu veux déplacer tout les contrôles Label de ton TabControl utilise la méthode suivante en parcourant les contrôles de tous les onglets
For i As Integer = 0 To Me.OnglaisPiste.TabPages.Count - 1
For Each ctrl In Me.OnglaisPiste.TabPages(i).Controls
If TypeOf (ctrl) Is Label Then
ctrl.Location = New Point(100, 100)
End If
Next
Next
math_gury
Messages postés32Date d'inscriptionvendredi 4 novembre 2005StatutMembreDernière intervention 8 juin 2009 25 sept. 2008 à 17:47
En fait j'atteint bien les controles car onglaispiste est un onglais de onglet... enfin bref c'est pas trés clair mais si je mets un arrêt su la ligne ctrl.Location = New Point(PosX, PosY), et que je mets la sourie sur Ctrl.location, je peux savoir la position actuel du label en question, met quand le fais l'allocation la valeur ne change pas...
math_gury
Messages postés32Date d'inscriptionvendredi 4 novembre 2005StatutMembreDernière intervention 8 juin 2009 26 sept. 2008 à 14:56
J'ai récupérer ces deux messages d'erreurs, cela est il plus intéressant???
ctrl.Text = {"Une exception 'Microsoft.VisualStudio.Debugger.Runtime.CrossThreadMessagingException' s'est produite"}
AccessibilityObject {"Opération inter-threads non valide : le contrôle 'Label194' a fait l'objet d'un accès à partir d'un thread autre que celui sur lequel il a été créé."} System.Windows.Forms.AccessibleObject
cs_Willi
Messages postés2375Date d'inscriptionjeudi 12 juillet 2001StatutModérateurDernière intervention15 décembre 201823 26 sept. 2008 à 15:31
Fallait le dire dès le début tout s'explique !
Tu ne peux pas directement modifier dans un autre thread les contrôles appartenant à un autre thread (ici le thread UI principale).
Tu dois passer par un délégué (pointeur de fonction).
cs_Willi
Messages postés2375Date d'inscriptionjeudi 12 juillet 2001StatutModérateurDernière intervention15 décembre 201823 27 sept. 2008 à 20:04
Exemple basé sur ton contrôle "OnglaisPiste", à toi d'adapté...
Private Delegate Sub MyDelHandler(ByVal x As Integer, ByVal y As Integer)
Private Sub MyDelProc(ByVal x As Integer, ByVal y As Integer)
For i As Integer = 0 To OnglaisPiste.TabPages.Count - 1
For Each ctrl In OnglaisPiste.TabPages(i).Controls
If TypeOf (ctrl) Is Label Then
ctrl.Location = New Point(x, y)
End If
Next
Next
End Sub
Sub MyThreadProc(ByVal obj As Object)
Dim iPos As Integer() = CType(obj, Integer())
Dim del As New MyDelHandler(AddressOf MyDelProc)
If OnglaisPiste.InvokeRequired Then
OnglaisPiste.Invoke(del, iPos(0), iPos(1))
End If
End Sub
'Code qui lance ton thread dans un bouton par exemple:
Dim th As New System.Threading.Thread(New _
System.Threading.ParameterizedThreadStart(AddressOf MyThreadProc))
'Position x et y 100 et 100.
Dim oPos As Integer() = New Integer() {100, 100}
th.Start(CType(oPos, Object))