【问题标题】:How to get an attribute from an unspecified object?如何从未指定的对象中获取属性?
【发布时间】:2022-01-15 00:24:30
【问题描述】:

我的程序在运行时动态创建了许多按钮。它们都附加到一个EventHandler,它链接到同一个方法。如何知道方法执行时按下了哪个按钮?我尝试使用 sender.Name,因为 object sender 在运行时是一个 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");
    }

【问题讨论】:

  • 您可以将sender 转换为Button: ((Button)sender).Name
  • 您还可以使用捕获 lambda,例如button.Click += (o, e) =&gt; MessageBox.Show($"{button.Name} is clicked");
  • 您的意思是property 不是attribute?如果您的意思是属性,您能否展示您要查找的属性的示例?

标签: c# winforms button


【解决方案1】:

你在正确的轨道上。

你遇到的问题是btn_Click中的sender是一个泛型object,所以编译器不知道它是什么类型,所以你需要通过强制转换来告诉它。

 public void btn_Click(object sender, EventArgs e)
 {    
     Button senderButton = (Button)sender;
     MessageBox.Show(senderButton.Name + " is clicked");
 }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-04-19
    • 2020-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多