C# 是否存在一种类型的对象,我可以向其强制转换按钮和菜单项对象以访问其标记属性?
我想将MenuItem对象和Button控件对象强制转换为可以引用其“Tag”属性的对象类型 有这样的对象类型吗 例如 但此操作失败-“无法将对象类型“System.Windows.Forms.MenuItem”强制转换为类型“System.Windows.Forms.Control”C# 是否存在一种类型的对象,我可以向其强制转换按钮和菜单项对象以访问其标记属性?,c#,.net,casting,C#,.net,Casting,我想将MenuItem对象和Button控件对象强制转换为可以引用其“Tag”属性的对象类型 有这样的对象类型吗 例如 但此操作失败-“无法将对象类型“System.Windows.Forms.MenuItem”强制转换为类型“System.Windows.Forms.Control” 在本例中,什么可以取代控件?控件是您要寻找的。控件是您要寻找的。菜单项和按钮的继承路径不同,没有共享/继承的标记属性 MenuItem继承自声明标记属性的菜单,Button继承自也实现标记属性的控件。您应该能够将
在本例中,什么可以取代控件?控件是您要寻找的。控件是您要寻找的。菜单项和按钮的继承路径不同,没有共享/继承的标记属性 MenuItem继承自声明标记属性的菜单,Button继承自也实现标记属性的控件。您应该能够将MenuItem和Button强制转换为组件,但这对您没有帮助,因为标记属性是在我提到的派生类(菜单和控件)中声明的
在这种特定情况下,您可能需要使用反射而不是继承。或者提出方案B对于MenuItem和Button,继承路径不同,没有共享/继承的标记属性 MenuItem继承自声明标记属性的菜单,Button继承自也实现标记属性的控件。您应该能够将MenuItem和Button强制转换为组件,但这对您没有帮助,因为标记属性是在我提到的派生类(菜单和控件)中声明的
在这种特殊情况下,您可能需要使用反射而不是继承。或者提出方案B我在没有IDE的情况下写这篇文章
object myControlOrMenu = sender as MenuItem ?? sender as Button;
if (myControlOrMenu == null)
// neither of button or menuitem
我写这个没有IDE
object myControlOrMenu = sender as MenuItem ?? sender as Button;
if (myControlOrMenu == null)
// neither of button or menuitem
使用“as”操作符。
使用“as”操作符。
对不起,我犯了错误。示例现在包含控件,因为它也不起作用。我以前尝试过此操作。对不起,我犯了错误。示例现在包含控件,因为它也不起作用。我以前尝试过此操作。
object tag;
Button button;
MenuItem menuItem = sender as MenuItem;
if (menuItem != null)
{
tag = menuItem.Tag;
}
else if( (button = sender as Button) != null )
{
tag = button.Tag;
}
else
{
//not button nor MenuItem
}