Получение имени элемента управления для события

#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;