1

MenuItem オブジェクトと Button コントロール オブジェクトの両方を、参照できる "Tag" プロパティのオブジェクト タイプにキャストしたいと考えています。

そのようなオブジェクトタイプはありますか?

例えば

void itemClick(object sender, EventArgs e)
{
    Control c = (Control)sender;
    MethodInvoker method = new MethodInvoker(c.Tag.ToString(), "Execute");
    method.Invoke();
}

これが失敗する場合を除き、「オブジェクト タイプ 'System.Windows.Forms.MenuItem' をタイプ 'System.Windows.Forms.Control' にキャストできません。

この例で Control を置き換えるものは何ですか?

4

4 に答える 4

2

私はIDEなしでこれを書いています。


object myControlOrMenu = sender as MenuItem ?? sender as Button;
if (myControlOrMenu == null)
// neither of button or menuitem

于 2008-11-27T05:35:10.920 に答える
2

「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 
}

于 2008-11-27T05:43:01.933 に答える
1

継承パスはMenuItemとButtonで異なり、共有/継承されたTagプロパティはありません。

MenuItemは、Tagプロパティを宣言するMenuから継承し、Buttonは、Tagプロパティも実装するControlから継承します。MenuItemとButtonの両方をComponentにキャストできるはずですが、Tagプロパティは前述の派生クラス(menuとcontrol)で宣言されているため、これは役に立ちません。

この特定のケースでは、おそらく継承ではなくリフレクションを使用する必要があります。またはプランBを考え出す

于 2008-11-27T05:31:23.613 に答える
0

コントロールはあなたが探しているものです。

于 2008-11-27T05:15:49.667 に答える