En effet, je ne connaos pas le nombre de controles présents, mais ils sont tous rangés dans une collection.
J'aimmerais donc savoir si il serait possible d'appliquer un MouseMove à une collection. Car si je l'utilise sur mon form, la position de la souris n'es pas mis à jour tant que je suis sur un autre objet
Si je ne suis pas assez clair, merci de me le dire
cs_Finality
Messages postés76Date d'inscriptionsamedi 28 janvier 2006StatutMembreDernière intervention22 janvier 2009 30 nov. 2007 à 21:42
Salut!
tout d'abord merci pour ta reponse
J'ai fait quelques recherches sur internet à propos de AddHandler mais je n'ai rien trouvé de concluant (ou de compréhensible). Pourrais-tu m'expliquer le fonctionnement de AddHandler?
Pour ton exemple :
' Quelque part à l'initialisation
For Each Ctrl As Control In TaCollectionDeControl
AddHandler Ctrl.MouseMove, AddressOf Ctrl_MouseMove
Next
Private Sub Ctrl_MouseMove(ByVal Sender As Object, ByVal e As MouseEventArgs)
cs_Finality
Messages postés76Date d'inscriptionsamedi 28 janvier 2006StatutMembreDernière intervention22 janvier 2009 1 déc. 2007 à 10:54
RE salut!
merci pour ton aide, qui fonctionne très bien :
Maintenant j'ai un autre probleme
Tout d'abord voilà mes codes
voilà ma fonction pour ajouter des pictureBox dans mon design:
Public Function Ajouter(ByVal Couleur As Integer, ByVal Type As Integer)
Dim PicBrique As New PictureBox
Me.Controls.Add(PicBrique)
With PicBrique
....
End With
Briques.Add(PicBrique)
'on redirige vers le private sub
For Each Ctrl As Control In Briques
AddHandler Ctrl.MouseMove, AddressOf Ctrl_MouseMove
AddHandler Ctrl.MouseDown, AddressOf Ctrl_MouseDown
AddHandler Ctrl.MouseUp, AddressOf Ctrl_MouseUp
Next
End Function
Puis après pour gérer le déplacement, j'utilise ceci :
; Private Sub Ctrl_MouseDown(ByVal Sender As Object, ByVal e As _
MouseEventArgs)
MouseEnfonce = True
clickX = e.X
clickY = e.Y
End Sub
Private Sub Ctrl_MouseUp(ByVal Sender As Object, ByVal e As MouseEventArgs)
MouseEnfonce = False
End Sub
Private Sub Ctrl_MouseMove(ByVal Sender As Object, ByVal e As _
MouseEventArgs)
Lorsque je n'ai qu'une seule brique (picturebox) tout fonctionne très bien. Le probleme, c'est quand j'ai plusieurs briques (picturebox), la dernière insérée se déplace bien mais les précédentes se mettent a "trembler" dans tous les sens
Pourrais-tu m'indiquer dù vient le probleme?
SI vous voulez je peux vous donnez mon fichier pour que ce soit plus clair
Je viens de tester, cela semble fonctionner normalement.
A mon avis, tu te perd dans les coordonnées et tout.
Le plus simple, (une autre méthode) et de faire une classe Brique ou on ajoute directement le code du déplacement.
Ca sera ainsi beaucoup plus propre vu qu'il n'y aura plus la gestion des mouse_move et des des coordonnées.
Public Class Brique
Inherits System.Windows.Forms.PictureBox
Private Const WM_NCHITTEST As Integer = &H84
Private Const HTCLIENT As Integer = &H1
Private Const HTCAPTION As Integer = &H2
Protected Overrides Sub WndProc(ByRef m As Message)
MyBase.WndProc(m)
If m.Msg = WM_NCHITTEST Then
If m.Result = CType(HTCLIENT, IntPtr) Then
m.Result = CType(HTCAPTION, IntPtr)
End If
End If
End Sub
End Class, ----
(Coloration syntaxique automatique par Kenji)
Après compilation, tu n'auras qu'à ajouter les "Brique" sur ta form et le déplacement se fera tout seul.
cs_Finality
Messages postés76Date d'inscriptionsamedi 28 janvier 2006StatutMembreDernière intervention22 janvier 2009 1 déc. 2007 à 12:59
tu as testé avec plusieurs briques dans la collection? et ce que le déplacement des anciennes briques qui déconne. la derniere ajoutée se déplace très bien.
Tu pourrais me dire d'où vient le probleme?
Je vais testé ta méthode mais j'aimerais savoir pourquoi cela ne marche pas
Je te remercie pour ta reponse
Arg, j'avais pas vu ca.
Ok, j'avais pas bien regarder ta fonction ajouter.
Quand tu ajoute les événements, il faut ajouter uniquement ceux de la nouvelle brique. La tu ajoute les événement pour toutes les briques. Donc au final, la pour les premières briques, les événement sont ajouté plusieurs fois.
Public Function Ajouter(ByVal Couleur As Integer, ByVal Type As Integer)
Dim PicBrique As New PictureBox
Me.Controls.Add(PicBrique)
With PicBrique
....
End With
Briques.Add(PicBrique)
'on redirige vers le private sub
<strike>For Each Ctrl As Control In Briques</strike>
AddHandler PicBrique.MouseMove, AddressOf Ctrl_MouseMove
AddHandler PicBrique.MouseDown, AddressOf Ctrl_MouseDown
AddHandler PicBrique.MouseUp, AddressOf Ctrl_MouseUp
<strike>Next
</strike>
End Function
cs_Finality
Messages postés76Date d'inscriptionsamedi 28 janvier 2006StatutMembreDernière intervention22 janvier 2009 1 déc. 2007 à 13:17
oui super ça marche !!!!!
donc en fait si je comprend bien AdHandler permet d'ajouter un évenement pour un control particulier c'est bien ça?
je voudrais savoir si ça te generai de parler sur msn afin que tu puisses m'expliquer plus clairement comment tout cela fonctionne exactement? Car je ne veux pas me contenter de faire marcher, mais de comprendre afin de pouvoir réutiliser après
Je te remercie encore pour ton aide (et pour ta patiente)