Как обнаружить кнопку мыши, удерживаемую над элементом управления winforms? - PullRequest
2 голосов
/ 26 марта 2009

Я хочу реализовать собственную полосу прокрутки, но хочу, чтобы она работала как стандартная. Поэтому мне нужно обнаружить, что кнопка мыши удерживается над стрелкой вверх или вниз на концах полосы, чтобы пользователь мог прокручивать ее с помощью концов полосы.

Как я могу определить, что кнопка удерживается?

MouseDown срабатывает только один раз при первом нажатии кнопки. MouseUp будет срабатывать при отпускании кнопки, но есть ли лучший способ, чем иметь какой-либо таймер, который периодически срабатывает между MouseDown и MouseUp?

1 Ответ

2 голосов
/ 26 марта 2009

Я не думаю, что вы сможете добиться большего успеха, чем Timer (хотя я могу быть удивлен).

Ранее я использовал Timer s для той же цели, и они работают, обычно так:

  • Timer Start() с, используя Interval из ~ 200 мс при нажатии кнопки. Мышь также Capture d в этой точке.
  • Каждый Tick производит прокрутку. (Первый Tick также изменяет интервал на ~ 25 мс)
  • Когда мышь поднимается, Timer.Stop() s.

Изменение Interval с 200 на 25 означает, что им нужно некоторое время удерживать мышь нажатой, но после этого действие прокрутки происходит быстрее / плавнее.

Кнопка «удерживается» на самом деле не является событием, это скорее состояние (т.е. она не происходит в определенный момент времени).

...