0

私は次のことをしたいのですが、引数タイプDoWindowはパラメーターに割り当てられないというエラーが表示されますSystem.EventHandler

デリゲートを から継承させるにはどうすればよいSystem.EventHandlerですか?

 public delegate void DoWindow(MdiLayout layoutInstruction) ;

 private ToolStripMenuItem MakeWindowMenu()
    {
        var tsi = new ToolStripMenuItem("Window");
        tsi.DropDownItems.Add(CreateMenuItem("Cascade","Cascade the features",    DoWindowLayout(MdiLayout.Cascade)));
        tsi.DropDownItems.Add(CreateMenuItem("Tile Vertical","Tile the features vertically", this.DoWindowTileVertically));

       //etc
        return tsi;
    }


private   ToolStripMenuItem CreateMenuItem(string Caption, string tooltip, EventHandler onClickEventHandler)
    {
        var item = new ToolStripMenuItem(Caption);
        item.Click += onClickEventHandler;
        item.ToolTipText = tooltip;
        return item;
    }

public DoWindow DoWindowLayout(MdiLayout layoutInstruction)
    {
        Master.MDIForm.LayoutMdi(layoutInstruction);
    }
4

2 に答える 2

2

パラメータとして を使用Actionし、匿名Eventhandlerを使用してAction

何かのようなもの:

    private ToolStripMenuItem MakeWindowMenu()
    {
        var tsi = new ToolStripMenuItem("Window");
        tsi.DropDownItems.Add(CreateMenuItem("Cascade", "Cascade the features", () => Master.MDIForm.LayoutMdi(MdiLayout.Cascade)));
        tsi.DropDownItems.Add(CreateMenuItem("Tile Vertical", "Tile the features vertically", () => {  }));
        return tsi;
    }

    private ToolStripMenuItem CreateMenuItem(string Caption, string tooltip, Action onClickEventHandler)
    {
        var item = new ToolStripMenuItem(Caption);
        item.Click += (s, e) => { onClickEventHandler.Invoke(); };
        item.ToolTipText = tooltip;
        return item;
    }
于 2013-02-18T21:12:41.807 に答える
0

カスタムEventHandlerには、メソッドの必要な署名が含まれている必要があります。言い換えると、ToolStripMenuItemClickには、署名を持つメソッドが必要です。

delegate void EventHandler(object Sender, EventArgs e);

したがって、デリゲートの署名と対応するメソッドを変更する必要があります。

詳細については、こちらを参照してください。

于 2013-02-18T20:54:20.990 に答える