Il metodo ‘xxx’ non può essere il metodo per un evento perché una class derivata da questa class definisce già il metodo

Ho un codice:

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

‘Layout’ è una class base per i miei altri layout. Ad esempio, ho un ‘Layout1’ derivato dalla class base ‘Layout’. Layout1 ha un elemento Display01. Display01 ha un evento DisplayClicked. Sto cercando di assegnare DisplayX_DisplayClicked tramite Visual Studio Designer all’evento DisplayClicked di Display01.

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

Mi dà un errore:

Il metodo ‘xxx’ non può essere il metodo per un evento perché una class derivata da questa class definisce già il metodo.

Come utilizzare il metodo dalla class base come eventhandler della class derivata? È ansible ? Se é cosi, come. Se no, perché.

Il progettista non può gestirlo, ma puoi farlo nel codice bene. Nel costruttore per Layout1, scrivi semplicemente:

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

In alternativa, è ansible consentire al progettista di generare un metodo denominato Display01_DisplayClicked e quindi implementarlo come:

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

È molto più prolisso, quindi lo farei al primo modo, ma permetterebbe al progettista di sapere che c’era un gestore per quell’evento.

Designer cerca solo i metodi nella class che stai modificando. Per risolvere questo problema, puoi sovrascrivere il metodo nella sottoclass e chiamare semplicemente il metodo base. Funzionerà perfettamente nel designer.

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