我有一个 WinForms 应用程序,其中有多个映射到同一处理程序的菜单项命令。我使用菜单项的 Tag
属性来确定处理程序的行为方式。
问题是,处理程序的 sender
参数的类型为 object
。那么如何读取对象的 Tag
属性呢?
我知道我可以将 sender
类型转换为菜单项的类型,但是如果我随后想要将按钮或其他控件映射到同一处理程序怎么办?是否有一种通用方法可以从发送者的任何对象中读取 Tag
属性?
这是我到目前为止所拥有的。似乎有效。但是有没有更精简的方法呢?
private void Header_Click(object sender, EventArgs e)
{
dynamic ctrl = sender as dynamic;
if (ctrl != null && sender.GetType().GetProperty("Tag") != null)
{
// Go ahead and reference ctrl.Tag
}
}
最佳答案
您可以将 is 强制转换为所有控件的父类型,而不是特定的子控件。
Control ctrl = sender as Control;
if (ctrl != null)
MessageBox.Show(ctrl.Tag.ToString());
关于c# - 如何安全访问对象的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17382972/