如何从未指定的对象中获取属性?
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) => 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");
【讨论】:
以上是关于如何从未指定的对象中获取属性?的主要内容,如果未能解决你的问题,请参考以下文章
GraphQL - 如何防止计算请求中未指定的资源中的字段?