方法’xxx’不能是事件的方法,因为此类派生的类已经定义了方法

我有一个代码:

public class Layout : UserControl { protected void DisplayX_DisplayClicked(object sender, DisplayEventArgs e) { CurrentDisplay = (CameraPanel)sender; } } 

‘Layout’是我其他布局的基类。 例如,我有一个’Layout1’派生自基类’Layout’。 Layout1有一个元素Display01。 Display01有一个DisplayClicked事件。 我正在尝试通过Visual Studio Designer将DisplayX_DisplayClicked分配给Display01的DisplayClicked事件。

 public partial class Layout1 : Layout { private CameraPanel Display01; } 

它给了我一个错误:

方法’xxx’不能是事件的方法,因为此类派生的类已经定义了方法。

如何使用基类中的方法作为派生类的事件处理程序? 可能吗 ? 如果是这样,怎么样。 如果不是,为什么。

设计师无法处理,但你可以在代码中做到这一点。 在Layout1的构造函数中,只需写:

 public Layout1() { InitializeComponent(); this.Display01.DisplayClicked += base.DisplayX_DisplayClicked; } 

或者,您可以让设计器生成名为Display01_DisplayClicked的方法,然后将其实现为:

 private void Display01_DisplayClicked(object sender, DisplayEventArgs e) { base.DisplayX_DisplayClicked(sender, e); } 

这更加冗长,所以我会以第一种方式做到这一点,但它会让设计师意识到该事件有一个处理程序。

Designer仅查找您正在编辑的类中的方法。 要解决此问题,您可以覆盖子类中的方法,只需调用基本方法即可。 它会在设计师中运作得很好。

  protected override void DisplayX_DisplayClicked(object sender, DisplayEventArgs e) { base.DisplayX_DisplayClicked(sender, e); }