2009-03-26 26 views
2

Je veux implémenter une barre de défilement personnalisée mais je veux qu'elle fonctionne comme celle standard. J'ai donc besoin de détecter que le bouton de la souris est enfoncé sur la flèche vers le haut ou vers le bas aux extrémités de la barre afin que l'utilisateur puisse faire défiler en utilisant les extrémités de la barre.Comment puis-je détecter le bouton de la souris sur un contrôle Winforms?

Comment puis-je détecter que le bouton est maintenu enfoncé? MouseDown ne se déclenche qu'une seule fois lorsque vous appuyez sur le bouton. MouseUp se déclenchera lorsque le bouton sera relâché mais y a-t-il un meilleur moyen que d'avoir une sorte de minuteur qui se déclenche périodiquement entre MouseDown et MouseUp?

Répondre

2

Je ne pense pas que vous serez en mesure de faire mieux que d'utiliser un Timer (bien que je puisse être surpris).

Je l'ai utilisé Timer s avant dans le même but, et ils travaillent généralement comme ceci:

  • Les TimerStart() s, en utilisant un Interval de ~ 200 ms lorsque le bouton descend. La souris est également Capture d à ce stade.
  • Chaque Tick effectue un défilement. (Le premier Tick change également l'intervalle à ~ 25 ms)
  • Lorsque la souris se lève, le Timer.Stop() s.

Le changement de Interval200-25 signifie qu'ils doivent maintenir la souris vers le bas pendant un certain temps, mais une fois qu'ils le font, l'action de défilement se produit plus rapidement/facilement. Le bouton étant "maintenu" n'est vraiment pas un événement, c'est plus un état (c'est-à-dire qu'il ne se produit pas à un moment spécifique dans le temps).

Questions connexes