2010-07-22 16 views

Respuesta

73

puede reenviar los eventos de este tipo.:

public event EventHandler SelectedIndexChanged 
    { 
     add { inner.SelectedIndexChanged += value; } 
     remove { inner.SelectedIndexChanged -= value; } 
    } 
+0

agradable, no sabía una sintaxis tal estaba disponible para los eventos en C#. De modo que también puede agregar efectos secundarios, supongo, para la asignación y eliminación del controlador de eventos (por ejemplo, si desea manejarlos/mantenerlos usted mismo o necesita hacer algo con COM o código nativo o incluso con hardware cuando esto ocurra) –

+4

Necesita tener cuidado con esto ya que el emisor del evento no es el control externo sino el interno. Esta podría ser la intención, pero hay casos en que esto podría ser indeseable. – GDS

+0

esto puede funcionar bien para SelectedIndexChanged de un combobox pero toma un poco más de código para funcionar para algún otro evento como CheckedChanged de una casilla de verificación. El uso del código similar al anterior le dará una sintaxis cercana al valor, mientras que la respuesta # 2 puede funcionar mejor para tales casos – gg89

3

Deberá codificarlas en el control usted mismo: el control de usuario no promociona automáticamente los eventos de sus controles secundarios. A continuación, puede cruce de cables su control real al evento promovido del control de usuario:

 public event EventHandler SelectedIndexChanged; 

     private void OnSelectedIndexChanged(object sender, EventArgs e) 
     { 
      if (SelectedIndexChanged != null) 
       SelectedIndexChanged(sender, e); 
     } 

     public UserControl1() 
     { 
      InitializeComponent(); 

      cb.SelectedIndexChanged += new EventHandler(OnSelectedIndexChanged); 
     } 

Desafortunadamente tendrá que hacer esto para cada evento que le interesa en

2

una solución muy simple en lugar de eventos personalizados que tienen, sería exponer el control anidado como una propiedad del control personalizado. Desde allí, podría adjuntar controladores de eventos muy fácilmente. No siempre es aconsejable exponer los controles secundarios, pero dependiendo del tipo de control y de cómo lo use, puede funcionar.

//create an instance of my control 
MyCustomControl controlInstance = new MyCustomControl(); 

//attach and event handler to the exposed subcontrol 
controlInstance.SaveButton.Click += new EventHandler(SaveButton_Click); 
+3

Esto no es incorrecto, pero para aquellos lectores que no estén familiarizados con la creación de controles de usuario personalizados, debe tenerse en cuenta que uno las razones por las que no es aconsejable exponer los controles secundarios es que anulan gran parte del propósito pretendido de encapsular una funcionalidad completa dentro de un Control de usuario. Al exponer un control completo para un niño, usted está, de hecho, animando al consumidor de Control de Usuario a manipular el control del niño directamente. En su lugar, intente exponer uno o dos eventos absolutamente necesarios para los consumidores de su Control de usuario, en lugar del control secundario completo. – CobaltBlue

0

hay otra manera de manejar que a través del diseñador:

En el diseñador, en el control personalizado, en la propiedad de cuadro combinado en "Diseño" set "modificadores" al interno.

Entonces donde tiene que hacer algo al respecto añadir:

CustControlName.YourCombo.SelectedIndexChanged += YourCombo_SelectedIndexChanged; 

junto con:

private void YourCombo_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    // Code to execute when the SelectedIndexIsChanged goes here 
} 
+0

funciona un poco más cómodamente pero aún está sujeto a comentarios de CobaltBlue – gg89

Cuestiones relacionadas