Проверить событие нажатия кнопки в форме - C # - PullRequest
1 голос
/ 04 ноября 2011

В настоящее время у меня есть форма с примерно 13 кнопками.

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

Есть ли какой-нибудь способ, чтобы я мог определить, когда срабатывает какое-либо событие нажатия кнопки, и определить, какая кнопка сработала?

Спасибо!

Ответы [ 8 ]

4 голосов
/ 04 ноября 2011

Имеют одну функцию, которая обрабатывает все события щелчка и используют свойства объекта «отправитель» для идентификации конкретной кнопки.

2 голосов
/ 04 ноября 2011

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

Но я предлагаю, если у вас схожее поведение в группе кнопок, сопоставьте их с одной функцией, но если действия различны, лучше использовать другой метод, но во всех формах с 13 кнопками не годится, вы можетеизменить их на меню, Tab, ...

1 голос
/ 04 ноября 2011
foreach (Control ctl in this.Controls)
{
   if (ctl is Button)
      (ctl as Button).Click += MyButtonHandler;
}

protected void MyButtonHandler(object sender, EventArgs e)
{
  Button clickedButton = sender as Button;
  //...
}
0 голосов
/ 25 октября 2013

Каждый правильный обработчик событий имеет параметр Object sender.Присвойте всем 13 кнопкам один и тот же обработчик, введя одно и то же имя в событии OnClick окна свойств, например: OnAnyButtonClicked.Созданная функция будет:

private void OnAnyButtonClicked(object sender, ...)
{
    // sender is the button that was clicked,
    // find out which button is clicked
    // call the corresponding function
}

Подсказка:

Чтобы узнать, какая кнопка нажата, вы можете использовать Object.ReferenceEquals Более быстрый способ избежать, если ... Тогда ... еще, если ... тогда ... еще, если ... использует свойство Tag каждой кнопки.Присвойте каждому Button.Tag значение enum, соответствующее действию, которое необходимо выполнить, и используйте оператор switch, чтобы узнать, что нужно сделать.

Вы также можете назначить делегата для button.Tag, ноэто почти то же самое, что создавать разные обработчики событий onClick для каждой кнопки.

0 голосов
/ 04 ноября 2011

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

0 голосов
/ 04 ноября 2011

по событию щелчка вы получаете ссылку на Отправителя - это кнопка, по которой вы нажали, чтобы вы могли проверить содержимое или тег и действовать в зависимости от значения:

private void Button_Click(object sender, RoutedEventArgs e)
{
    MessageBox.Show((sender as Button).Tag.ToString());
}
0 голосов
/ 04 ноября 2011
private void OnButtonClicked(object sender, EventArgs e){
   Button oButton = sender as Button;
   if (oButton != null){
     // your logic goes here !
   }
}

Переменные oButton - ваша текущая кнопка.( важно проверить, если oButton != null при использовании оператора as)

0 голосов
/ 04 ноября 2011

Первым параметром функции обратного вызова является кнопка, которая была нажата.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...