Tengo un cuadro combinado en un control personalizado. ¿Cómo puedo exponer eventos específicos, como SelectedIndexChanged o KeyPress, etc. a cualquier persona/cosa que implemente mi control personalizado?Exposición de eventos del control subyacente
Respuesta
puede reenviar los eventos de este tipo.:
public event EventHandler SelectedIndexChanged
{
add { inner.SelectedIndexChanged += value; }
remove { inner.SelectedIndexChanged -= value; }
}
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
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);
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
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
}
funciona un poco más cómodamente pero aún está sujeto a comentarios de CobaltBlue – gg89
- 1. Eliminar un control asp.net del código subyacente
- 2. Eventos de control de usuario
- 3. Control del navegador web: cómo capturar eventos del documento?
- 4. Android: delegado de eventos táctil para ver subyacente
- 5. WPF control de usuario genérico con código subyacente
- 6. Padres control del ratón Enter/Deja eventos con controles secundarios
- 7. Exposición de un servicio .Net
- 8. UITextFieldDelegate vs UITextField eventos de control
- 9. Manejo de eventos de WPF User Control
- 10. Reciba eventos de control remoto sin audio
- 11. WPF: ¿eventos en una plantilla de control?
- 12. ASP/C# código subyacente no puede alcanzar el control del marcado
- 13. Enrutamiento Eventos clave a otro control
- 14. Varios eventos MouseHover en un control
- 15. exposición sobre flechas en haskell
- 16. VB.NET Obtener system.type subyacente del tipo nulable
- 17. Controlar Auto-exposición de la cámara
- 18. La exposición de un puntero en Boost.Python
- 19. ¿Desactivar completamente la compensación de exposición automática?
- 20. ¿Qué significa "solo exposición"? ¿Por qué usarlo?
- 21. Selenium RC y eventos de control de entrada
- 22. Qt4: eventos del botón del mouse de QTableView no detectados
- 23. WPF - Manejo de eventos desde el control del usuario en el modelo de vista
- 24. Gestión de eventos de Javascript y control de flujo
- 25. Diseño Visualización de tiempo para eventos de Control de usuario
- 26. ASP.NET - Eventos de control que no encienden Inside Repeater
- 27. ASP.Net: ClientID no es correcto en el código subyacente de un control de usuario
- 28. ¿Cómo liberar el control dentro de su controlador de eventos?
- 29. Eventos globales del mouse
- 30. acceso XAML controla desde C# de código subyacente
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) –
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
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