Страницы

Поиск по вопросам

понедельник, 10 февраля 2020 г.

Как узнать какой клавишей мыши была нажата кнопка?

#c_sharp #wpf #button


Как в событии Button_Click определять, какая кнопка мыши была нажата?
    


Ответы

Ответ 1



Чтобы определить какая кнопка мыши была нажата, вы можете использовать свойство SystemParameters.SwapButtons private void Button_Click(object sender, RoutedEventArgs e) { if (SystemParameters.SwapButtons) { // Была нажата правая кнопка } else { // Была нажата левая кнопка } } Но учтите, это событие вызывается только при нажатии основной кнопки. Об этом сказано по ссылке на английский SO в одном из ответов. Из вопроса не совсем ясно, такой ли ответ вы хотели получить. Если вам нужно в одном методе обрабатывать разные клики по одной кнопке, то предлагаю использовать другой подход, который больше подходит для WPF. А именно - команды. В качестве примера предположим, что у вас есть некоторое число, которые вы хотите уменьшать на единицу при нажатии правой кнопки и увеличивать на единицу при нажатии левой кнопки. Пишите простую VM: public class MainViewModel : INotifyPropertyChanged { private int count; public int Count { get { return count; } set { count = value; OnPropertyChanged("Count"); } } private ICommand clickCommand; public ICommand ClickCommand { get { return clickCommand; } set { clickCommand = value; } } public void buttonClick(object param) { int value = Convert.ToInt32(param); if (value == 0) Count++; else if (value == 1) Count--; } public MainViewModel() { clickCommand = new RelayCommand(buttonClick); } public event PropertyChangedEventHandler PropertyChanged; protected virtual void OnPropertyChanged(string name) { PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(name)); } } Наш метод принимает параметр, который показывает какая кнопка была нажата. Если 0- левая, если 1 - правая. Эти значения были выбраны произвольно, вы можете передавать в объект то, что посчитаете нужным. Теперь XAML: Для того, что определить какое действие нужно обработать используется Gesture: Чтобы узнать возможные варианты нужно обратится к перечислению MouseAction Код для RelayCommand не привожу, чтобы не загромождать ответ. Но вы без труда сможете найти подходящую реализацию. Например, тут Если код показался слишком большим - не пугайтесь ;) В дальнейшем вы будете пользоваться специальными библиотеками (например, FSharpViewModule для F# - проектов) или даже фреймверками (Prism) для крупных проектов которые упростят разработку.

Ответ 2



Отвечает за это событие MouseEventArgs

Ответ 3



Cначала приводите event к MouseEventArgs: MouseEventArgs me = (MouseEventArgs) e; Потом смотрите на: me.Button Либо посмотреть тут - для WPF ссылка

Ответ 4



Я относительно новичок и могу не знать всех тонкостей, но по-моему для определения кнопки проще использовать событие MouseDown: private void button_MouseDown( object sender, MouseEventArgs e ) { if(e.Button==MouseButtons.Right) { //Нажата правая кнопка } else if(e.Button==MouseButtons.Left) { //Нажата левая кнопка } else { //Нажата средняя кнопка } }

Комментариев нет:

Отправить комментарий