Comment puis-je détecter un bouton de la souris enfoncé sur un PictureBox?
J'ai besoin de mettre le feu à un événement lorsque la souris est au-dessus d'un PictureBox avec le bouton de la souris déjà cliqué et maintenue enfoncée.
Problèmes:
Les événements MouseDown et des gestionnaires d'événement MouseEnter ne fonctionnent pas très bien ensemble.
Par exemple, une fois un bouton de la souris est cliqué et en le maintenant enfoncé, C# déclenche l'événement MouseDown gestionnaire, mais quand le curseur se déplace sur la PictureBox le MouseEnter événement ne se déclenche pas, jusqu'à ce que le bouton de la souris est realeased.
source d'informationauteur Justin Tanner | 2008-10-04
Vous devez vous connecter pour publier un commentaire.
Lorsque la souris est enfoncé, la plupart des contrôles seront alors de Contrôle.Capture l'entrée de la souris. Cela signifie que tous les MouseMove les événements sont envoyés à l'original de contrôle qui a capturé plutôt que sur le contrôle de la souris se trouve être plus. Cela continue jusqu'à ce que la souris perd de capturer ce qui se passe généralement sur la souris vers le haut.
Si vous avez vraiment besoin de savoir quand la souris est au-dessus de votre contrôle, même lorsqu'un autre contrôle a capturé l'entrée de la souris puis vous ne vraiment avoir un sens. Vous avez besoin de snoop les fenêtres des messages destinés à d'autres contrôles à l'intérieur de votre application. Pour ce faire vous avez besoin d'ajouter un filtre de message ...
Alors vous avez besoin pour mettre en œuvre les IMessageFilter une classe...
Puis vous regardez pour la souris de déplacer les événements et vérifier si elles sont au-dessus de votre zone d'image et de faire tout ce que vous voulez faire.
Les événements de la souris
Utiliser l'événement MouseDown pour simplement détecter une baisse de pression d'un bouton de la souris et de définir cette.La Capture de vrai, de sorte que vous obtenez alors d'autres événements de la souris, même lorsque la souris quitte le contrôle (c'est à dire que vous n'obtiendrez pas un MouseLeave événement, parce que vous avez capturé la souris). Communiqué de la capture par la définition de cette.La Capture de la valeur false lorsque MouseUp se produit.
Juste la vérification de l'état de la souris
Cela peut ne pas être pertinent, mais vous pouvez vérifier
System.Windows.Control.MousePosition
et voir si elle est dans laPictureBox.ClientRectangle
puis vérifier leControl.MouseButtons
propriété statique pour les boutons sur lesquels il est peut-être arrêté à tout moment.Comme dans:
Configurer un événement MouseMove dans le contrôle PictureBox:
Puis, au sein de votre événement MouseMove gestionnaire, vérifier pour voir si le bouton gauche de la souris (ou autre) est pressé:
Si vous essayez de mettre en œuvre un glisser-déplacer de la sorte, le Glisser... événements (DragEnter, DragDrop etc.) sur la réception de la zone d'image sont ce que vous voulez utiliser. Fondamentalement, vous démarrez l'opération de glisser à l'aide de la méthode DoDragDrop de la source de contrôle, et puis tout le contrôle que vous faites glisser le pointeur sur aura sa Traînée... les événements déclenchés.
De recherche "DoDragDrop" sur MSDN pour voir comment le mettre en œuvre.
La meilleure façon de déplacer un Formulaire basé sur la position de la souris et de contrôle de la position relative est similaire à ce que Ian Campbell posté.
Où imgMoveWindow est un Contrôle PictureBox.
Bruno Ratnieks
Sniffer Les Réseaux
définir un indicateur ou d'un état sur la souris vers le bas. relâchez la souris.
Lorsque la souris par-dessus les feux de l'image de la boîte de vérifier votre état.
Maintenant, vous pouvez détecter le moment où une personne se déplaçant quelque chose.