CGSI3
Messages postés416Date d'inscriptionvendredi 22 février 2008StatutMembreDernière intervention 7 janvier 2018
-
22 mai 2014 à 22:01
CGSI3
Messages postés416Date d'inscriptionvendredi 22 février 2008StatutMembreDernière intervention 7 janvier 2018
-
30 mai 2014 à 15:31
Bonjour a tous,
J'utilise Vb.Net 2013 et un framework 2
Sur une Form toute simple, j'ajoute un PictureBox
Je viens d'essayer de plusieurs manières de capturer l'Event MouseWheel sur
mon PictureBox et impossible d'avoir "PictureBox1_MouseWheel" d'affiché
Toujours "Form2_MouseWheel"
Cela ressemble a un problème de focus mais seul cet Event pose soucis .. pas l'Event "PictureBox1_MouseMove" par exemple qui fonctionne bien
D'où peut provenir ce problème et comment le corriger?
Je dois par la suite fabriquer une class qui hérite du control Picturebox et
qui utilise cet Event.
Public Class Form2
Private Sub Form2_MouseMove(sender As Object, e As MouseEventArgs) Handles Me.MouseMove
Me.Text = "Form2_MouseMove"
End Sub
Private Sub Form2_MouseWheel(sender As Object, e As MouseEventArgs) Handles Me.MouseWheel
Me.Text = "Form2_MouseWheel"
End Sub
Private Sub PictureBox1_MouseMove(sender As Object, e As MouseEventArgs) Handles PictureBox1.MouseMove
Me.Text = "PictureBox1_MouseMove"
End Sub
Private Sub PictureBox1_MouseWheel(sender As Object, e As MouseEventArgs) Handles PictureBox1.MouseWheel
Me.Text = "PictureBox1_MouseWheel"
End Sub
End Class
CGSI3
Messages postés416Date d'inscriptionvendredi 22 février 2008StatutMembreDernière intervention 7 janvier 20181 22 mai 2014 à 23:17
re
J'ai trouvé cette parade mais cela ne m'explique pas pourquoi Form2 ne donne pas le focus a son control sur cet Event
Comment faire alors pour modifier toutes les Form qu'utiliserai ma class herité du picturebox ?
Private Sub Form2_MouseWheel(sender As Object, e As MouseEventArgs) Handles Me.MouseWheel
Dim i As Integer, trouve As Boolean = False
Dim controlRectangle As Rectangle
For i = 0 To Controls.Count - 1
controlRectangle = Controls(i).RectangleToScreen _
(Controls(i).ClientRectangle)
If controlRectangle.Contains(Me.PointToScreen(New Point(e.X, e.Y))) Then
Controls(i).Focus()
trouve = True
End If
Next
If Not trouve Then Me.Text = "Form2_MouseWheel"
End Sub
CGSI3
Messages postés416Date d'inscriptionvendredi 22 février 2008StatutMembreDernière intervention 7 janvier 20181 23 mai 2014 à 20:40
Bonjour Zermelo,
Merci pour le retour
Cela m'oriente donc vers une bizarrerie de vb.net .
Il est en effet peu concevable que les controls présent sur une form soit privée de l'event MouseWheel parce que la Form intercepterai l'event.
Je continue mes recherches a ce sujet.
Par ce moyen, j'ai essayé de supprimer l'event de la Form croyant que cela éviterai d'intercepter l'event et qu'il serait donné au control.
=> En fait cela supprime l'event complètement (pour la Form mais aussi au controls)
Protected Overrides Sub OnMouseEnter(ByVal e As System.EventArgs)
MyBase.OnMouseEnter(e)
Me.Focus() 'l'évènement mousewheel ne fonctionne que lorsque le controle possède le focus
End Sub
Protected Overrides Sub OnMouseLeave(ByVal e As System.EventArgs)
MyBase.OnMouseLeave(e)
Me.Parent.Focus() 'on redonne le focus au controleur parent pour stopper les évènement mousewheel
End Sub
Petite explication rapide :
Ce n est pas parce que la souris passe sur un control que le focus est donné au control.
Les 2 fonctions ci dessus contourne le pb en obligeant ce focus