#c# #winforms #button
#c# #winforms #кнопка
Вопрос:
Моя программа динамически создает несколько кнопок во время выполнения. Все они привязываются к обработчику событий, который ссылается на один и тот же метод. Как узнать, какая кнопка была нажата при выполнении метода? Я попытался использовать sender.Name , потому что отправитель объекта — это кнопка во время выполнения, но она не компилируется.
List<Button> buttons = new List<Button>();
private void Form1_Load(object sender, EventArgs e)
{
for (int i = 1; i < 3; i )
{
buttons.Add(new Button() { Name = "btn" i });
buttons.Last().Click = new EventHandler(btn_Click);
}
}
public void btn_Click(object sender, EventArgs e)
{
MessageBox.Show(sender.Name " is clicked");
}
Комментарии:
1. Вы можете привести
sender
кButton
:((Button)sender).Name
2. Вы также можете использовать лямбда-выражение для захвата, например
button.Click = (o, e) => MessageBox.Show($"{button.Name} is clicked");
3. Вы имеете в виду свойство , а не атрибут ? Если вы имеете в виду атрибут, можете ли вы показать пример атрибута, который вы хотите найти?
Ответ №1:
Вы на правильном пути.
Проблема, с которой вы сталкиваетесь, заключается в том, что in btn_Click
sender
является универсальным object
, поэтому компилятор не знает, какой это тип, поэтому вам нужно указать его путем приведения.
public void btn_Click(object sender, EventArgs e)
{
Button senderButton = (Button)sender;
MessageBox.Show(senderButton.Name " is clicked");
}