如何从未指定的对象中获取属性?
How to get an attribute from an unspecified object?
我的程序在运行时动态创建了一些按钮。所有这些都附加到一个 EventHandler,后者链接到相同的方法。如何知道方法执行时按下了哪个按钮?我尝试使用 sender.Name,因为对象发送者在运行时是一个 Button,但它没有编译。
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");
}
你走在正确的轨道上。
你遇到的问题是btn_Click
中的sender
是泛型object
,所以编译器不知道它是什么类型,所以你需要告诉它通过铸造。
public void btn_Click(object sender, EventArgs e)
{
Button senderButton = (Button)sender;
MessageBox.Show(senderButton.Name + " is clicked");
}
我的程序在运行时动态创建了一些按钮。所有这些都附加到一个 EventHandler,后者链接到相同的方法。如何知道方法执行时按下了哪个按钮?我尝试使用 sender.Name,因为对象发送者在运行时是一个 Button,但它没有编译。
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");
}
你走在正确的轨道上。
你遇到的问题是btn_Click
中的sender
是泛型object
,所以编译器不知道它是什么类型,所以你需要告诉它通过铸造。
public void btn_Click(object sender, EventArgs e)
{
Button senderButton = (Button)sender;
MessageBox.Show(senderButton.Name + " is clicked");
}