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

Posted

技术标签:

【中文标题】如何从未指定的对象中获取属性?【英文标题】: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?如果您的意思是属性,您能否展示您要查找的属性的示例? 【参考方案1】:

你在正确的轨道上。

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

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

【讨论】:

以上是关于如何从未指定的对象中获取属性?的主要内容,如果未能解决你的问题,请参考以下文章

jQuery如何获取指定的属性值

JS如何获取指定对象下面的表单元素的值,见代码!

GraphQL - 如何防止计算请求中未指定的资源中的字段?

如何将 C# 属性指定给 ASP.NET MVC 中的 Json 对象?

如何指定我想在 GraphQLQuery 中获取的字段

从未知对象获取属性和值