2010-07-02 9 views
7

Tengo un código:El método 'xxx' no puede ser el método para un evento debido a una clase de esta clase se deriva de ya define el método

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

'Diseño' es una clase base para mis otros diseños. Por ejemplo, tengo un 'Diseño1' derivado de la clase base 'Diseño'. Layout1 tiene un elemento Display01. Display01 tiene un evento DisplayClicked. Estoy intentando asignar DisplayX_DisplayClicked a través de Visual Studio Designer al evento DisplayClicked de Display01.

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

Me da un error:

El método 'xxx' no puede ser el método para un evento debido a una clase de esta clase se deriva de ya define el método.

¿Cómo usar el método de la clase base como controlador de eventos de la clase derivada? Es posible ? Si es así, cómo. Si no, por qué.

+0

No copie esto en absoluto. ¿Qué * exactamente * escribes? –

+0

@Hans, ¿no puedes reproducir? OK, paso a paso. 1. Agregue un nuevo diseño de clase base: UserControl. 2. Agregue el método DisplayX_DisplayClicked (remitente del objeto, DisplayEventArgs e) con el cuerpo vacío a la clase base. 3. Agregue la clase derivada Layout1: Layout. 4. Agregue un poco de control a Layout1, por ejemplo, agregué CameraPanel Display01. Display01 tiene un evento DisplayClicked. Quiero agregar un controlador de eventos a Display01.DisplayClicked a través de Visual Studio Designer. Deseo usar un método de la clase base para ese objetivo. Pero contra el diseñador lo niega. ___ Quiero agregar un controlador de eventos a través de Visual Studio Designeer, no manual. – nik

+0

No dijiste lo que escribiste. –

Respuesta

9

El diseñador no puede manejar eso, pero puede hacerlo en código muy bien. En el constructor de Layout1, acaba de escribir:

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

Alternativamente, se puede dejar que el diseñador de generar un método denominado Display01_DisplayClicked, y luego implementarlo como:

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

Eso es mucho más detallada, así que lo haría de la primera manera, pero le dejaría saber al diseñador que había un controlador para ese evento.

+0

¿Por qué no Visual Studio Designer permite utilizar el método de clase base? – nik

+0

porque la búsqueda de diseñador solo está en la clase actual. – serhio

+0

Usaré su solución con base.xxx ... sin embargo, no es muy buena, porque no puedo ver a estos controladores en el diseñador de estudio visual. Si otro programador observa un control de usuario en visual studio desinger => no vería nada (¿algo?). @serhio, bad studia. pero, por otro lado, ¿debería el diseñador vs mirar a toda la jerarquía? tal vez debería, y tal vez no debería ... – nik

2

El diseñador solo busca los métodos en la clase que está editando. Para solucionar este problema, puede sobreescribir el método en su subclase y simplemente llamar al método base. Funcionará bien en el diseñador.

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