Как определить, какая кнопка мыши вызвала событие щелчка в WPF?
-
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";
}