Как определить, какая кнопка мыши вызвала событие щелчка в WPF?

StackOverflow https://stackoverflow.com/questions/977329

  •  13-09-2019
  •  | 
  •  

Вопрос

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

Когда я использую Mouse.LeftButton или Mouse.RightButton, оба мне говорят"реализованный", что является их состоянием после щелчка.

Я просто хочу знать, кто из них нажал на мою кнопку.Если я изменюсь EventArgs к MouseEventArgs, получаю ошибки.

КСАМЛ: <Button Name="myButton" Click="OnClick">

private void OnClick(object sender, EventArgs e)
{
//do certain thing. 
}
Это было полезно?

Решение

Если вы просто используете событие Click кнопки, то единственная кнопка мыши, которая его активирует, — это основная кнопка мыши.

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

void OnClick(object sender, RoutedEventArgs e)
    {
        if (SystemParameters.SwapButtons) // Or use SystemInformation.MouseButtonsSwapped
        {
            // It's the right button.
        }
        else
        {
            // It's the standard left button.
        }
    }

Редактировать: Эквивалентом SystemInformation в WPF является SystemParameters, который можно использовать вместо него.Хотя вы можете включить System.Windows.Forms в качестве ссылки для получения SystemInformation без какого-либо негативного воздействия на приложение.

Другие советы

Вы можете использовать, как показано ниже:

MouseEventArgs myArgs = (MouseEventArgs) e;

А затем получите информацию с помощью:

if (myArgs.Button == System.Windows.Forms.MouseButtons.Left)
{
    // do sth
}

Решение работает в VS2013, и вам больше не нужно использовать событие MouseClick;)

Ты прав, Хосе, это событие MouseClick.Но вы должны добавить небольшой делегат:

this.button1.MouseDown += новый System.Windows.Forms.MouseEventHandler(this.MyMouseDouwn);

И используйте этот метод в своей форме:

    private void MyMouseDouwn(object sender, MouseEventArgs e) 
    {
        if (e.Button == MouseButtons.Right)
           this.Text = "Right";

        if (e.Button == MouseButtons.Left)
            this.Text = "Left";
    }
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top