6
votes

Événement de la mouse à la souris avec Images?

Je veux survoler une fois une image (ou toutes les photos et la forme principale) et utiliser la roue de la souris pour faire défiler. Cependant je n'ai pas de chance. J'ai écrit Picturebox1.mousewheel et vérifiez le delta. Je fixe un point d'arrêt pour quand ça va! = 0. Jusqu'à présent, peu importe ce que j'ai fait, je ne pouvais rien avoir rien à arriver. J'ai aussi essayé Mousemove et cela n'a pas fonctionné. Cependant, la rupture de la déclaration Si fonctionne. Je ne peux jamais faire fonctionner le volant.

Comment puis-je créer des images (ou tout contrôle sous la forme) appelle un événement de la mouse?

-edit- Nettoyer. J'ai ajouté l'événement à l'objet qui a l'événement la plupart du temps. Ça marche assez bien. Je ne suis pas sûr de savoir pourquoi je ne pensais pas à cela avant d'écrire cette question. Je suis toujours ouvert à la souris sur + Solutions de roue.


1 commentaires

Je sais que cette question est ancienne. Mais cela a été modifié pour Windows 10. Dans Windows 10, toutes les commandes survole la souris survient à recevoir un événement de la molette de la souris.


5 Réponses :


13
votes

Windows n'envoie pas le message de défilement de la souris au contrôle survolé, il va au contrôle avec la mise au point. Vous savez déjà comment réparer le focus.

Ce comportement devient intuitif à cause de la façon dont les navigateurs et les programmes de bureau fonctionnent. Vous trouverez du code pour modifier cela dans ma réponse dans ce fil . Attention à ce que cela fonctionne sur toute fenêtre dans votre application. Vous devrez ajouter un filtrage sur la valeur de la poignée si cela n'est pas souhaitable.


Mise à jour: Ce comportement a été modifié dans Win10. Il dispose d'un nouveau paramètre système nommé "Scroll inactif Windows lorsque je tire sur eux", activé par défaut. Donc, concentrez-vous plus importants et cela fonctionne désormais très similaire à celui qu'il se comporte dans un navigateur. Test de votre application est important, vous pouvez voir ce qui se passe sur une version plus ancienne de Windows en désactivant temporairement l'option système.


1 commentaires

Excellente réponse. Vous m'avez vraiment aidé avec tout mon interface graphique.



2
votes

Cette réponse explique comment le faire. En bref, créez un événement de MOUSOUSER sur la zone d'image qui vient de concentrer la case photo. Ensuite, la case d'image recevra des événements de la souris.


1 commentaires

Vous ne devez jamais emporter le clavier au centre de l'utilisateur car la souris a été déplacée! C'est vraiment une solution de contournement très très laide. Ne faites pas cela! En dehors de cela, cela ne fonctionne pas pour moi. Même si je fixais la mise au point sur la boîte à images, je ne reçois pas l'événement de la roue.



0
votes

Les réponses ici ne fonctionnent pas pour moi. J'ai la boîte à images dans un volet défilable et il y a peu de travaux supplémentaires à faire pour un fonctionnement correct.

Ce que vous avez à faire est de remplacer la fonction Onmousehehe () fonction dans le formulaire. Là, vous obtenez l'événement de roue et vous devez vérifier si la souris est à l'intérieur de la vue imprenable. Mais ce n'est pas assez. Imaginez que vous affichez une image de 5000 x 5000 pixels à l'intérieur d'une vitre défilée qui ne montre qu'une petite partie de l'image. Ensuite, vous devez également vérifier si la souris est au-dessus du volet et à tous ses parents. Le code ci-dessous fonctionne indépendamment de la position de défilement des barres de défilement de l'une quelconque des commandes parent de la photeurebox. xxx


0 commentaires

0
votes

Abonnamment de la mouse de la boue de forme et vérifiez si E.x et E.y sont à l'intérieur de la zone d'emplacement de la photeurebox xxx


0 commentaires

0
votes

Ceci fonctionne également si la carte photo n'est pas à la position 0,0 sous la forme.

' =====================================================================================
'  Windows10 has a new system setting 
'   named "Scroll inactive windows when I hover over them", turned on by default.
' -------------------------------------------------------------------------------------
'  The following correction does the same for Windows 8 / 7 / XP
' =====================================================================================
Protected Overrides Sub OnMouseWheel(ByVal e As MouseEventArgs)
    Dim p As Point
    p = pbox_Graph.PointToClient(Me.PointToScreen(e.Location))
    If pbox_Graph.ClientRectangle.Contains(p) Then
        pbox_TimeGraph_MouseWheel(Me, e)
    Else
        MyBase.OnMouseWheel(e)
    End If
End Sub


0 commentaires