如何更改菜单按钮的事件处理程序?

时间:2016-04-15 07:27:21

标签: c# winforms events event-handling

我有一个派生自ContextMenuStrip的课程。这个类有标准按钮,在整个项目中使用:

public class ItemMenu : ContextMenuStrip
{
    public ItemMenu (IContainer container)
        : base(container)
    {
        MenuItemAdd = new ToolStripMenuItem("Add", null, AddNew);

        this.Items.AddRange(new ToolStripItem[] 
        { 
            mnuAdd, 
        });
    }

    public void AddNew(object sender, EventArgs e)
    {
        //Code to add new item here...
    }
}

以表格形式:

cmsMenu = new ItemMenu(this.components);

现在我有一个特殊的情况,我希望表单本身处理添加项目的代码。

如何更改上面的类,以便在默认情况下类本身处理操作,但在特定情况下,使用其他方法(事件/委托?)?

1 个答案:

答案 0 :(得分:0)

要使其发挥作用,需要进行以下更改:

public class ItemMenu : ContextMenuStrip
{
    public event EventHandler AddNewItem;

    public ItemMenu (IContainer container)
        : base(container)
    {
        MenuItemAdd = new ToolStripMenuItem("Add", null, AddNew);

        this.Items.AddRange(new ToolStripItem[] 
        { 
            mnuAdd, 
        });
    }

    public void AddNew(object sender, EventArgs e)
    {
        EventHandler handler = AddNewItem;
        if (handler != null)
        {
            handler(sender, e);
        }
        else
        {
            OnAddNew(sender, e);
        }
    }

    protected void OnAddNew(object sender, EventArgs e)
    {
        //Code to add new item here...
    }
}