#c# #winforms #event-handling
#c# #winforms #обработка событий
Вопрос:
В моей форме C # Windows Forms у меня есть несколько кнопок, которые генерируются динамически. Я назначил следующий метод для события щелчка. Возможно ли получить имя кнопки, с помощью которой запускается событие?
private void btnBrowsDoc_Click(object sender, EventArgs e)
{
try
{
if (openFileDialog1.ShowDialog().Equals(DialogResult.OK))
{
gbxDocument.Controls["txtDocument" count].Text =
openFileDialog1.FileName;
}
else
{
return;
}
}
catch (Exception ex)
{
//handle the exception
}
}
Комментарии:
1. Почему
try...catch
? — Обычно это довольно плохой стиль программирования, особенно если вы не оцениваете пойманное исключение.2. @ Uwe Keim: я обрабатываю исключение с помощью текстового файла … я просто удаляю эту строку кода при добавлении сюда…
Ответ №1:
Вы можете использовать sender
аргумент. Это элемент управления (в данном случае кнопка), который вызвал событие щелчка:
var button = (Button)sender;
button.Name ...
Примечание: В случае, если вы подписали другие элементы управления (например, панели и т. Д.) На один и тот же обработчик событий, Вы можете проверить, является ли отправителем кнопка, используя as
оператор:
var button = sender as Button;
if (button != null)
{
button.Name ...
...
}
Комментарии:
1. Я думаю, что в разделе N.B. было бы лучше проверить с помощью параметра ‘is’, а затем выполнить действие. В противном случае вы не сможете повторно использовать отправителя. например, если (отправитель — кнопка) возвращает (отправитель как кнопка).Name; иначе, если (отправитель — панель) возвращает (отправитель как панель).Name; и т.д.
2. @DavidRefaeli: это действительно зависит от того, что вам нужно. Если вам просто нужно проверить, есть ли кнопка, я бы придерживался
as
, но это вопрос предпочтений
Ответ №2:
Первый аргумент обработчика событий, « object sender
«, содержит ссылку на объект / элемент управления, который вызвал / запустил событие.
var button = sender as Button;