Saltar al contenido

¿Cómo tomo eventos de subcontroles en un control de usuario en una aplicación WinForms?

Luego de indagar en varios repositorios y foros al concluir hemos descubierto la solución que te mostraremos pronto.

Solución:

La mejor práctica sería exponer los eventos en el UserControl que burbujean los eventos hasta el formulario principal. Me he adelantado y he creado un ejemplo para usted. Aquí hay una descripción de lo que proporciona este ejemplo.

  • UserControl1
  • Crear un UserControl con TextBox1
  • Registre un evento público en el UserControl llamado ControlChanged
  • Dentro de UserControl registrar un controlador de eventos para el TextBox1 Evento de cambio de texto
  • Dentro de TextChangeEvent función de controlador que llamo el ControlChanged evento para burbujear en el formulario principal
  • Form1
  • Suelta una instancia de UserControl1 en el diseñador
  • Registrar un controlador de eventos en UserControl1 por MouseLeave y para ControlChanged

Aquí hay una captura de pantalla que ilustra que el ControlChanged evento que definí en el UserControl está disponible a través de UX en Visual Studio en el formulario principal de Windows.

Controladores de eventos para el control de usuarios

El mejor modelo para este tipo de cosas será crear eventos personalizados en su control de usuario y generarlos en los momentos apropiados.

Su escenario es bastante complejo, pero no inaudito. (De hecho, estoy en un modo muy similar en uno de mis proyectos actuales). La forma en que lo enfoco es que el control del usuario es responsable de su propia validación. No uso CausesValidation; en cambio, en el punto de control de usuario apropiado, realizo la validación a través de una anulación de ValidateChildren(). (Esto generalmente sucede cuando el usuario hace clic en “Guardar” o “Siguiente” en el control de usuario, para mí).

No estar familiarizado con la interfaz de usuario de control de usuario, puede que no sea 100% el enfoque correcto para usted. Sin embargo, si genera eventos personalizados (posiblemente con un EventArgs personalizado que especifica si realizar o no la validación), debería poder llegar a donde quiere estar.

Deberá conectar los eventos que desea capturar dentro de su control de usuario y publicarlos a través de algunas propiedades de eventos personalizadas en el propio control de usuario. Un ejemplo simple sería envolver un evento de clic de botón:

// CustomControl.cs
// Assumes a Button 'myButton' has been added through the designer

// we need a delegate definition to type our event
public delegate void ButtonClickHandler(object sender, EventArgs e);

// declare the public event that other classes can subscribe to
public event ButtonClickHandler ButtonClickEvent;

// wire up the internal button click event to trigger our custom event
this.myButton.Click += new System.EventHandler(this.myButton_Click);
public void myButton_Click(object sender, EventArgs e)

  if (ButtonClickEvent != null)
  
    ButtonClickEvent(sender, e);
  

Luego, en el formulario que usa ese control, conecta el evento como lo haría con cualquier otro:

// CustomForm.cs
// Assumes a CustomControl 'myCustomControl' has been added through the desinger
this.myCustomControl.ButtonClickEvent += new System.EventHandler(this.myCustomControl_ButtonClickEvent);
myCustomControl_ButtonClickEvent(object sender, EventArgs e)

  // do something with the newly bubbled event

Ten en cuenta mostrar esta reseña si te valió la pena.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *