Intereting Posts
Привязка данных к вложенным свойствам? Автоматическое улучшение отсканированных изображений Почему string.Empty рекомендуется больше, чем “”? Несколько добавленных объектов могут иметь один и тот же первичный ключ в Entity Framework В C # 4.0 можно ли каким-либо образом сделать частным членом одного classа доступным только для определенного другого classа? Запустить mstsc.exe с указанным именем пользователя и паролем Media Foundation с C # Пользовательский ASP.NET MVC ActionFilterAttribute – перехватчики никогда не вызываются Задача MultiBinding для пользовательского элемента WPF Custom Control Как вы сравниваете объекты DateTime с использованием заданного допуска в C #? Разница в производительности между синхронным HTTP-обработчиком и асинхронным HTTP-обработчиком Получить валюту из текущей культуры? HttpClient повторно используется с сертификатом клиента Определение сериализованного размера типа .NET и неуправляемой эффективности памяти Как читать basicHttpBinding, определенную в файле app.config

C # Как использовать обработчик события одного клика для нескольких кнопок

Возможный дубликат:
C # Отправка кнопок buttonclicks одному и тому же объекту

У меня в моем проекте много кнопок. Чтобы сделать программу короче, сделайте каждое нажатие кнопки одним и тем же методом «Button_click», отредактировав файл Designer.cs и указав каждый щелчок на мой метод.

this.button1.Click += new System.EventHandler(this.Mymethod); 

Как я могу определить, какая кнопка была нажата в методе Mymethod?

Спасибо!

MyMethod должен быть объявлен следующим образом:

 void Mymethod (object sender, EventArgs e) { if (sender == btn1) MessageBox.Show ("Button1"); } 

Используйте аргумент отправителя. Это ваша кнопка (объект, который поднял событие).

Обработчик кликов обычно структурирован следующим образом:

 protected void MyButton_Click(object sender, EventArgs e) 

В этом вам нужен object sender . Это будет ссылка на элемент управления, который отправил событие click. Он помещен как object но если вы знаете тип (в вашем случае вы говорите, что все кнопки), то вы можете его бросить:

 var myButton = (Button)sender; 

Вероятно, вы обнаружите, что гораздо более понятный подход к этой проблеме состоит в том, чтобы установить CommandName и CommandArgument каждой кнопки, а вместо использования OnClick использовать совместно используемый обработчик OnCommand.

Этот обработчик примет параметр CommandEventArgs вместо параметра EventArgs, и вы сможете запросить его непосредственно, чтобы увидеть CommandName и CommandArgument нажатой кнопки.

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

и вызовите это в конструкторе формы, чтобы установить все кнопки click event handler

  public void SetButtonClick(Control parent) { if (parent is Button) { (parent as Button).Click += new EventHandler(this.Mymethod); } foreach (Control item in parent.Controls) { SetButtonClick(item); } } 

для проверки, какая кнопка нажата.