Come posso rilevare tenendo premuto il mouse sopra un controllo WinForms?
-
22-08-2019 - |
Domanda
Voglio realizzare una barra di scorrimento personalizzato, ma voglio che funziona come quello standard. Così ho bisogno di rilevare che il pulsante del mouse viene tenuto premuto né sulla freccia su o giù alle estremità della barra in modo che l'utente può scorrere utilizzando finisce al bar.
Come posso rilevare che il pulsante si svolge?
MouseDown spara solo una volta quando il tasto viene premuto prima. MouseUp viene emesso quando il pulsante viene rilasciato, ma c'è un modo migliore di avere una sorta di timer che innesca periodicamente tra il MouseDown e MouseUp?
Soluzione
Non credo che si sta andando ad essere in grado di fare meglio che usare un Timer
(anche se può essere sorpresi).
Ho usato Timer
s prima per lo stesso scopo, e funzionano, di solito in questo modo:
- I
Timer
sStart()
, usando unInterval
di ~200
ms quando il pulsante va giù. Il mouse è inoltreCapture
d a questo punto. - Ogni effetti
Tick
una pergamena. (Il primoTick
cambia anche l'intervallo di ~25
ms) - Quando il mouse viene in su, i
Timer.Stop()
s.
Il cambio della Interval
da 200
a 25
significa che essi hanno per tenere il mouse verso il basso per un po ', ma una volta che lo fanno, l'azione di scorrimento avviene in modo più rapido / senza intoppi.
Il tasto essere "tenuta" in realtà non è un evento, è più di uno stato (cioè esso non si verifica in un punto specifico nel tempo).