Désactiver la souris molette de défilement dans la zone de liste déroulante VB.NET
Quelqu'un sait-il un moyen de désactiver la molette de la souris lorsqu'un contrôle tel qu'une zone de liste modifiable ou zone de liste a le focus? Pour ma part, combobox est tout j'ai besoin de la réponse.
J'ai une zone de liste déroulante choisir de déclencher une requête SQL sur SelectedIndexChanged, et accidentellement le défilement de la roue alors que la zone de liste déroulante a le focus causes d'environ six requêtes SQL pour déclencher simultanément.
Vous devez vous connecter pour publier un commentaire.
Le contrôle zone de liste déroulante ne pas vous laisser facilement remplacer le comportement de la Molette de la souris de l'événement. Ajoutez une nouvelle classe de votre projet et de coller le code ci-dessous. Compiler. Déposez le nouveau contrôle à partir du haut de la boîte à outils sur votre formulaire.
Attention que cela désactive également la roue dans la liste déroulante.
mwe.Handled = True
vous pouvez appelerParent.Focus
(ouParent.Parent.Focus
jusqu'à ce que vous atteignez un contrôle qui peut prendre le focus, bien que cela ne se salissant). Quand enveloppé dans unIf DroppedDown = False
, cela fonctionne très bien lorsque vous ne voulez pas la zone de liste déroulante d'interférer avec une capacité du parent à défiler.J'ai trouvé un mélange de réponse, mettez ce code dans la roulette de la souris de l'événement:
C'est tout. Vous n'avez pas besoin de créer une nouvelle classe, si vous avez votre projet dans un état avancé.
DirectCast(e, HandledMouseEventArgs).Handled = True
Si vous sous-classe du contrôle qu'il est possible (toutes mes excuses pour le C#)
SecurityPermission
.Une telle option serait d'ajouter un gestionnaire de la zone de liste déroulante, et à l'intérieur de cette zone de liste déroulante, résoudre la situation. Je ne suis pas sûr de savoir comment votre code est mis en place, mais je suppose que si vous saviez que lorsque l'événement a été qui arrive, vous pourriez mettre en place une sorte de mise pour éviter les requêtes de passe
De cette façon, vous seriez en mesure de maintenir l'utilisateur d'être en mesure de défilement dans la zone de liste déroulante, mais également être en mesure d'empêcher les requêtes de passe
Combinant toutes les réponses sur ce fil, la meilleure solution si vous ne voulez pas créer un contrôle personnalisé est de gérer la molette de la souris de l'événement. Ci-dessous permettra également à la liste défile à l'écran si il est tombé vers le bas.
En supposant que votre zone de liste déroulante est appelé combobox1:
J'ai eu exactement le même problème, mais a constaté qu'il suffit de changer le focus du contrôle après exécution de la requête à un autre contrôle tels que la "Requête" bouton lui-même travaillé plus que parfait. Il m'a également permis d'encore faire défiler le contrôle jusqu'à la SelectedIndex réellement changé et une seule ligne de code.
Il suffit de mettre ceci dans la roulette de la souris de l'événement ou dans un seul gestionnaire pour tous les contrôles cela s'applique, peut-être l'appeler wheelsnubber.
DirectCast(e, HandledMouseEventArgs).Manipulés = True