Quelle est la meilleure façon de savoir si la souris est au-dessus d'une forme ou pas?
J'ai compris comment faire pour capturer les clics de souris sur l'ensemble de la forme, mais cette méthode ne se traduit pas bien pour MouseEnter
et MouseLeave
. Ma mise en page est constituée de beaucoup de Panels
et TableLayoutPanels
donc il n'y a pas de tout-englobant le contrôle, je peux contrôler les événements, et, évidemment, un MouseLeave
événement pour un bouton ne signifie pas que le curseur vers la gauche de l'ensemble du formulaire. Quelqu'un a trouvé un bon moyen de contourner ce problème?
OriginalL'auteur dlras2 | 2010-05-20
Vous devez vous connecter pour publier un commentaire.
Comme quelqu'un l'a souligné ici il est possible d'utiliser SetWindowsHookEx() ou raccordez simplement événement MouseMove sur tous les contrôles dans le formulaire. Ce dernier travaille pour moi d'amende. Le seul inconvénient est que si vous ajouter/supprimer des contrôles lors de l'exécution, vous pourriez avoir besoin d'une autre solution.
OriginalL'auteur SlavaGu
Un endroit pour commencer est de vérifier si le ClientRectangle contient la position actuelle de la souris. Ainsi, par exemple, sur votre MouseMove gestionnaire, vous pourriez avoir:
MouseEnter
événements, mais quand la souris sort de la forme, il s'arrête appelantMouseMove
événements, de sorte qu'il ne serait pas vérifier pour voir si il est à gauche de la forme ou pas, non?Quand avez-vous besoin de savoir que la souris est au-dessus de votre forme?
L'ensemble forme agit comme un géant bouton. (C'est une notification d'un appel entrant.) Ainsi, lorsque l'utilisateur de la souris sur la forme, je veux qu'il allume, indiquant que la pression, il va prendre l'appel.
OriginalL'auteur bentsai
Ajouter un timer pour la forme avec un Intervalle raisonnable (peut-être 50ms). Utilisez ce code dans la Tique gestionnaire d'événements pour voir si la souris est sur la forme:
EDIT: Voici une solution plus complète pour la détection des que la souris est sur la forme et que le bouton a été cliqué.
timer1Tick()
est la Tique gestionnaire d'événement pour un Timer sur la forme. Il n'est pas nécessaire d'avoir d'autres gestionnaires d'événements pour les autres contrôles du formulaire. Cela rendra votre formulaire de "un énorme bouton" 🙂OriginalL'auteur Jerry Fernholz
J'ai trouvé quelques réponses qui ont été proches de ce que je voulais, mais je me suis retrouvé à faire quelque chose de différent. Je voulais détecter si la souris à gauche de la zone de formulaire (y compris la barre de titre) et cela a fonctionné pour moi:
Dans le constructeur du formulaire, j'ai ajouter un timer:
Puis dans la tique méthode, je ne les suivants:
OriginalL'auteur IgnusFast
Faire Un MouseEnter et MouseLeave événement sur la Forme et les Contrôles de Formulaire; utiliser un booléen pour déterminer si la souris est entré ou à gauche.
Un exemple serait
Cela peut s'avérer fastidieuse si vous avez de nombreux objets sur le formulaire
OriginalL'auteur Bradley William Elko