PictureBox et l' Event MouseWheel

CGSI3 Messages postés 416 Date d'inscription vendredi 22 février 2008 Statut Membre Dernière intervention 7 janvier 2018 - 22 mai 2014 à 22:01
CGSI3 Messages postés 416 Date d'inscription vendredi 22 février 2008 Statut Membre Derniè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
A voir également:

4 réponses

CGSI3 Messages postés 416 Date d'inscription vendredi 22 février 2008 Statut Membre Dernière intervention 7 janvier 2018 1
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


--
0
Zermelo Messages postés 378 Date d'inscription samedi 22 septembre 2012 Statut Membre Dernière intervention 13 août 2017 14
23 mai 2014 à 08:41
Bonjour CGSI3,

Le test avec vb 2010 et le framework 4 donne le même résultat. Vous pourriez peut-être consulter

http://msdn.microsoft.com/fr-fr/library/default.aspx

mais cela me paraît bien compliqué.

Cordialement.
0
CGSI3 Messages postés 416 Date d'inscription vendredi 22 février 2008 Statut Membre Dernière intervention 7 janvier 2018 1
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.

Bonne prog
CGSI3

--
0
CGSI3 Messages postés 416 Date d'inscription vendredi 22 février 2008 Statut Membre Dernière intervention 7 janvier 2018 1
30 mai 2014 à 15:31
Bonjour a tous,

RemoveHandler Me.MouseWheel, AddressOf Me.Form1_MouseWheel

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)


En fait la solution est toute simple

http://codes-sources.commentcamarche.net/source/49288-controle-image-zoom-dezoom

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

Bonne prog
CGSI3
--
0
Rejoignez-nous