如何从未指定的对象中获取属性?

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");
 }