Как я могу обнаружить кнопку мыши, удерживаемую над элементом управления winforms?

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

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

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


person Nick Williamson    schedule 26.03.2009    source источник


Ответы (1)


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

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

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

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

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

person Daniel LeCheminant    schedule 26.03.2009