Обнаружение движения колеса мыши (прокрутки) на C#


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

Событие MouseWheel

Многие программные приложения включают поддержку взаимодействия с пользователем с помощью колеса мыши, где оно присутствует. Обычно колесо мыши усиливает функции, которые могут быть использованы с другими операциями мыши или клавиатуры. Например, вы можете прокручивать документы с помощью клавиатуры или щелкая и перетаскивая области полос прокрутки. С колесиком мыши прокрутка может быть проще, потому что указатель не нужно располагать над небольшой областью полосы прокрутки.

Если вы хотите реализовать поддержку прокрутки в своих собственных проектах Windows Forms, существует два общих подхода. Во-первых, вы можете положиться на поддержку действий колесика мыши, встроенную во многие элементы управления Windows Forms. Для пользовательских действий, таких как масштабирование, вы можете определить, когда колесо мыши перемещается, когда указатель мыши находится над определенным элементом управления, используя событие MouseWheel, которое определено в базовом классе Control.

Образец формы

Чтобы продемонстрировать использование события MouseWheel, давайте создадим пример проекта. Создайте новый проект приложения Windows Forms в Visual Studio. После подготовки добавьте три метки в автоматически сгенерированную форму. Назовите метки: DeltaLabel, TotalDeltaLabel и LinesLabel. Установите для свойства Text всех меток значение "0".

На рисунке ниже показан пример макета формы. В этом случае включаются три дополнительные метки, чтобы показать цель для трех, которые будут показывать значения.

демонстрационная форма события MouseWheel event
демонстрационная форма события MouseWheel event

Захват прокрутки

Событие MouseWheel передает сведения об активности пользователя в объекте MouseEventArgs. Это включает в себя свойство Delta, которое возвращает величину перемещения колеса с момента последнего события. Положительные значения указывают на движение колеса вперед или вверх. Когда колесо мыши поворачивается в сторону пользователя, Дельта-значение отрицательно. Масштаб числа увеличивается по мере того, как колесо вращается быстрее.

Чтобы продемонстрировать это, давайте захватим событие MouseWheel для всей формы. Для начала зарегистрируйте событие в конструкторе формы:

public Form1()
{
    InitializeComponent();
    this.MouseWheel += Form_MouseWheel;
}
Нам нужно поле в классе формы для хранения общей суммы, которую колесо переместило с момента загрузки формы. Добавьте целое поле для этой цели:

int _totalDelta = 0;
Наконец, давайте добавим код для этого события. Мы покажем немедленное значение Дельты в метке DeltaLabel и общее движение с момента запуска программы в метке TotalDelta:

void Form_MouseWheel(object sender, MouseEventArgs e)
{
    _totalDelta = _totalDelta + e.Delta;
    DeltaLabel.Text = e.Delta.ToString();
    TotalDeltaLabel.Text = _totalDelta.ToString();
}
Линии прокрутки колесика мыши

Если вы используете событие MouseWheel для прокрутки информации, особенно когда прокручиваемые элементы включают текст, вы должны убедиться, что скорость прокрутки стандартизирована. Пользователи могут указать чувствительность колесика мыши в Панели управления, установив количество строк текста, которые должны быть прокручены для определенного количества вращения колесика мыши. Количество линий можно прочитать из статического свойства SystemInformation класса MouseWheelScrollLines. Это расстояние следует прокручивать для каждого дельта-приращения 120.

Чтобы показать, как определить количество строк для прокрутки, измените код события, как показано ниже.

void Form_MouseWheel(object sender, MouseEventArgs e)
{
    _totalDelta = _totalDelta + e.Delta;
    DeltaLabel.Text = e.Delta.ToString();
    TotalDeltaLabel.Text = _totalDelta.ToString();
    LinesLabel.Text =
        (SystemInformation.MouseWheelScrollLines * _totalDelta / 120).ToString();
}
Запустите программу и используйте колесико мыши, чтобы увидеть обновление значений. Попробуйте изменить чувствительность колесика мыши на панели управления и снова запустить программу, отметив разницу в отображаемых значениях.
Автор этого материала - я - Пахолков Юрий. Я оказываю услуги по написанию программ на языках Java, C++, C# (а также консультирую по ним) и созданию сайтов. Работаю с сайтами на CMS OpenCart, WordPress, ModX и самописными. Кроме этого, работаю напрямую с JavaScript, PHP, CSS, HTML - то есть могу доработать ваш сайт или помочь с веб-программированием. Пишите сюда.

тегизаметки, си шарп, мышь, ввод-вывод




Отправляя сообщение я подтверждаю, что ознакомлен и согласен с политикой конфиденциальности данного сайта.



Периодическое копирование файлов в C++ с паузой
Урок 19. Наследование и конструкторы C#
Введение в типы UML-диаграмм