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
conTextBox1
- Registre un evento público en el
UserControl
llamadoControlChanged
- Dentro de
UserControl
registrar un controlador de eventos para elTextBox1
Evento de cambio de texto - Dentro de
TextChangeEvent
función de controlador que llamo elControlChanged
evento para burbujear en el formulario principal Form1
- Suelta una instancia de
UserControl1
en el diseñador - Registrar un controlador de eventos en
UserControl1
porMouseLeave
y paraControlChanged
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.
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.