如何覆盖事件?

时间:2016-12-04 14:26:41

标签: c# winforms

我有一个继承自ContextMenuStrip的类。我使用OnOpening事件根据需要启用/禁用菜单项:

protected override void OnOpening(CancelEventArgs e)
{
    base.OnOpening(e);

    var count = bindingSource.Count;
    var item = (T)bindingSource.Current;

    removeMenuItem.Enabled = item != null;
    removeAllMenuItem.Enabled = count > 0;
}

以上工作适用于标准要求。但是,现在我想要在父表单中覆盖上面的方法。

所以我尝试做以下事情:

myContextStrip.Opening += (s, ea) =>
{
    var current = bindingSource.Current as MyItem;

    myContextStrip.RemoveMenuItem.Enabled = !current?.IsDeleted ?? true;
    myContextStrip.RemoveAllMenuItem.Enabled = bindingSource.Count > 0;
};

实施上述功能并不像预期的那样有效,因为课程“OnOpening'调用上面的方法后仍然会调用该方法。

是否有更好的方法来覆盖父窗体中的OnOpening事件,并阻止它进一步调用派生的contextmenu类中的代码?

0 个答案:

没有答案