Coordonnees de la souris pour contrôles sans MouseMove [Résolu]

kikou93 384 Messages postés mardi 4 février 2014Date d'inscription 26 août 2017 Dernière intervention - 30 nov. 2016 à 11:23 - Dernière réponse : kikou93 384 Messages postés mardi 4 février 2014Date d'inscription 26 août 2017 Dernière intervention
- 1 déc. 2016 à 09:42
Bonjour,
Pour connaître la position de la souris sur la form, on utilise le code suivant :
Public Class Form1
Dim X, Y As Integer
Private Sub Form1_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseMove,
X = Control.MousePosition.X - Me.Location.X
Y = Control.MousePosition.Y - Me.Location.Y
Label1.Text = X
Label2.Text = Y
End Sub
End Class

mais dés qu'on n'est dans un contrôle (par exemple : Panel, Label, TextBox, Button ... ect) la position de la souris n'est plus détecté, en ajoutant (
Panel1.MouseMove, Panel2.MouseMove, Label1.MouseMove, Label2.MouseMove
)
cela fonction, voici le code :
Public Class Form1
Dim X, Y As Integer
Private Sub Form1_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseMove, Panel1.MouseMove, Button1.MouseMove, Label1.MouseMove, Label2.MouseMove
X = Control.MousePosition.X - Me.Location.X
Y = Control.MousePosition.Y - Me.Location.Y
Label1.Text = X
Label2.Text = Y
End Sub
End Class

mais le problème est qu'il y a des contrôles qui n'ont pas l'événement MouseMove comme le contrôle WebBrowser
il y a t'il une solution à ce problème ?
Merci pour votre aide
Comment ça marche c'est cool! 
      1000 Merci les Amis
Afficher la suite 

6 réponses

Répondre au sujet
cs_ShayW 3233 Messages postés jeudi 26 novembre 2009Date d'inscription 6 décembre 2017 Dernière intervention - 30 nov. 2016 à 13:14
0
Utile
1
Bonjour


pour savoir la position de la souris avec l'evenement mousemove
de form1 je procède ainsi
   Private Sub Form1_MouseMove(sender As Object, e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseMove
Dim x, y As Integer
x = e.X
y = e.Y
End Sub


pour un control dans la form1 ex picturebox
Private Sub PictureBox1_MouseMove(sender As Object, e As System.Windows.Forms.MouseEventArgs) Handles PictureBox1.MouseMove
Dim x, y As Integer
x = e.X
y = e.Y
End Sub



mais le problème est qu'il y a des contrôles qui n'ont pas l'événement MouseMove comme le contrôle WebBrowser

mais s' il y en a pas c'est parceque ce n'est pas nécessaire
la question est que veux tu faire ?
kikou93 384 Messages postés mardi 4 février 2014Date d'inscription 26 août 2017 Dernière intervention - 30 nov. 2016 à 14:06
Bonjour cs_ShayW,
merci pour ta réponse
je vais expliquer ce que je veux peut-être qu'il y a une autre méthode
J'ai deux Panel qui contient plusieurs contrôles (Panel1 et Panel2)
je met :
Panel1.Dock = DockStyle.Left
Panel2.Dock = DockStyle.Fill
Panel1.Size = New Size (300,500)
Panel2.Size = New Size (300,500) ' avec Me.Size = New Size (600,500)

Dans le Panel1 il y a le contrôle WebBrowser1 avec :
WebBrowser1 = DockStyle.Bottom 

je voulais :
Si la souris est sur le Panel la couleur du Panel change, en premier j'ai pensais a :
  Private Sub Panel1_MouseHover(ByVal sender As Object, ByVal e As System.EventArgs) Handles Panel1.MouseHover
Panel1.BackColor = Color.Red 'Par exemple
Panel2.BackColor = Color.Green
End Sub
Private Sub Panel2_MouseHover(ByVal sender As Object, ByVal e As System.EventArgs) Handles Panel2.MouseHover
Panel1.BackColor = Color.Green
Panel2.BackColor = Color.Red
End Sub

je peux ajouter les autres contrôles (Label, PictureBox ..ect) à ce code, mais je ne peux pas ajouter le WebBrowser
et si je passe directemen du Panel2 a WebBrowser1 (qui est en DockStyle.Bottom)
La couleur du panel 1 ne change pas
alors j'ai pensé à une autre solution, si je connais les coordonnées de la souris sur la form je n'ai qu'à faire comme ça :
  Dim X, Y As Integer
Private Sub Form1_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseMove, Panel1.MouseMove, Panel2.MouseMove, Label1.MouseMove, Label2.MouseMove
X = Control.MousePosition.X - Me.Location.X
Y = Control.MousePosition.Y - Me.Location.Y
' Label1.Text = X
' Label2.Text = Y
If X >= 0 And X <= 300 Then
Panel1.BackColor = Color.Red 'Par exemple
Panel2.BackColor = Color.Green
ElseIf X > 300 And X <= 600 Then
Panel1.BackColor = Color.Green
Panel2.BackColor = Color.Red
End If
End Sub

J'espère que j'ai bien expliquer
Commenter la réponse de cs_ShayW
cs_ShayW 3233 Messages postés jeudi 26 novembre 2009Date d'inscription 6 décembre 2017 Dernière intervention - 30 nov. 2016 à 19:03
0
Utile
3
J'espère que j'ai bien expliquer
pas trop

d'abord

tu écris
Panel1.Dock = DockStyle.Left
Panel2.Dock = DockStyle.Fill
Panel1.Size = New Size (300,500)
Panel2.Size = New Size (300,500)

Si le dockstyle.left est activé c.a.d que il va etre ancré sur toute
la hauteur de ta form donc le 500 du Panel1.Size = New Size (300,500) n'a aucun effet de meme pour
panel2 dont le docstyle est fill c.a.d il est ancré sur toute la form
donc Panel2.Size = New Size (300,500) n'a pas d'effet

maintenant comme panel2 recouvre toute la form le
Form1_MouseMove n'est jamais detecté.

la suite viendra...
kikou93 384 Messages postés mardi 4 février 2014Date d'inscription 26 août 2017 Dernière intervention - 30 nov. 2016 à 19:42
Bonsoir cs_ShayW
C'est vrais dis comme sa, ce n'est pas du tout compréhensible
Si le dockstyle.left est activé c.a.d que il va etre ancré sur toute
la hauteur de ta form donc le 500 du Panel1.Size = New Size (300,500) n'a aucun effet de meme pour

je ne suis pas obligé de préciser la hauteur du panel, il suffit de faire
Panel1.Width = 300

panel2 dont le docstyle est fill c.a.d il est ancré sur toute la form
donc Panel2.Size = New Size (300,500) n'a pas d'effet

La même chose pour le panel2 on mets :
Panel2.Dock = DockStyle.Right
Panel2.Width = 300

Comme ça chaque Panel aura la moitié de la form
maintenant comme panel2 recouvre toute la form le
Form1_MouseMove n'est jamais detecté.

c'est vrais pas besoin de Form1_MouseMove, on utilise seulement les autres contrôles :
Private Sub Panel1_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Panel1.MouseMove, Panel2.MouseMove, Label1.MouseMove, Label2.MouseMove, PictureBox1.MouseMove ' ainsi de suite (tous les autres contrôles)
'Code
End sub

Désolé, j'ai fait beaucoup d'erreur dans mon explication
cs_ShayW 3233 Messages postés jeudi 26 novembre 2009Date d'inscription 6 décembre 2017 Dernière intervention > kikou93 384 Messages postés mardi 4 février 2014Date d'inscription 26 août 2017 Dernière intervention - 30 nov. 2016 à 20:53
Panel2.Width = 300
ne sert pas
maintenant tu veux chaque fois que la souris rentre dans le webbrowser
modifier la backcolor de panel1 et panel2
le mousemove du panel1 et mousemove du panel2 ne te servira pas
car il est detecté seulement quand la souris est dedans et comme
le web est en dehors il faut peut etre jouer avec le mouseleave et
le mouse enter
par ex si tu es dans le panel1 est tu rentres dans le web

 Private Sub Panel1_MouseEnter(sender As Object, e As System.EventArgs) Handles Panel1.MouseEnter
If Control.MousePosition.Y >= WebBrowser1.Top Then
Panel1.BackColor = Color.Green
Panel2.BackColor = Color.Red
End If
End Sub
kikou93 384 Messages postés mardi 4 février 2014Date d'inscription 26 août 2017 Dernière intervention > cs_ShayW 3233 Messages postés jeudi 26 novembre 2009Date d'inscription 6 décembre 2017 Dernière intervention - 1 déc. 2016 à 09:42
Bonjour cs_ShayW
en utilisant MouseEnter et MouseLeave, on obtient le code suivant :
  Private Sub Panel1_MouseEnter(ByVal sender As Object, ByVal e As System.EventArgs) Handles Panel1.MouseEnter
Panel1.BackColor = Color.Green
Panel2.BackColor = Color.Red
End Sub
Private Sub Panel2_MouseEnter(ByVal sender As Object, ByVal e As System.EventArgs) Handles Panel2.MouseEnter
Panel1.BackColor = Color. Red
Panel2.BackColor = Color. Green
End Sub
Private Sub Panel1_MouseLeave(ByVal sender As Object, ByVal e As System.EventArgs) Handles Panel1.MouseLeave, Panel2.MouseLeave
Panel1.BackColor = Color.Green
Panel2.BackColor = Color.Red
End Sub

il fonctionne très bien
MouseMove donne les coordonnées de la souris chaque fois qu'elle bouge, alors j'ai pensé à ce code :
Dim X, Y As Integer
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Timer1.Start()
End Sub
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
X = Control.MousePosition.X - Me.Location.X
Y = Control.MousePosition.Y - Me.Location.Y
Label1.Text = " Coordonnée dans le sens X: " & X
Label2.Text = " Coordonnée dans le sens Y: " & Y
If X < 0 Or Y < 0 Or X > 600 Or Y > 500 Then ' Si la souris est en dehors de la form
Panel1.BackColor = Color. Blue
Panel2.BackColor = Color. Blue
ElseIf (X >= 0 And X <= 300) And (Y >= 0 And Y <= 500) Then ' Si la souris est dans le Panel1
Panel1.BackColor = Color.Green
Panel2.BackColor = Color.Red
ElseIf (X > 300 And X <= 600) And (Y >= 0 And Y <= 500) Then ' Si la souris est dans le Panel2
Panel1.BackColor = Color. Red
Panel2.BackColor = Color. Green
End If
End Sub

j'ai met l'intervalle du Timer1 égale à 1 (Chaque un millième de seconde (1/1000 s)),
Pour ne pas le changer à chaque fois que la taille des Panels change on fait comme ça :
Dim X, Y As Integer
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Timer1.Start()
End Sub
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
X = Control.MousePosition.X - Me.Location.X
Y = Control.MousePosition.Y - Me.Location.Y
Label1.Text = " Coordonnée dans le sens X: " & X
Label2.Text = " Coordonnée dans le sens Y: " & Y
If X < 0 Or Y < 0 Or X > Me.Width Or Y > Me.Height Then ' Si la souris est en dehors de la form
Panel1.BackColor = Color. Blue
Panel2.BackColor = Color. Blue
ElseIf (X >= 0 And X <= Panel1.Width) And (Y >= 0 And Y <= Me.Height) Then ' Si la souris est dans le Panel1
Panel1.BackColor = Color.Green
Panel2.BackColor = Color.Red
ElseIf (X > Panel1.Width And X <= Me.Width) And (Y >= 0 And Y <= Me.Height) Then ' Si la souris est dans le Panel2
Panel1.BackColor = Color. Red
Panel2.BackColor = Color. Green
End If
End Sub

Merci pour ton aide précieuse
Commenter la réponse de cs_ShayW

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.