2009-07-01 21 views
9

Tengo un control de usuario personalizado en mis formularios de Windows. Este control tiene algunas etiquetas.Control de usuario Haga clic en - Windows Forms

Voy a mostrar dinámicamente una matriz de estos controles en mi formulario que contendrá diferentes bits de datos.

Lo que intento hacer es saber qué control de usuario se ha seleccionado cuando hago clic en él.

Esto funciona cuando hago clic en un espacio vacío en el control de usuario, sin embargo, si hago clic en cualquier etiqueta en el control de usuario, no reconocerá el clic de control de usuario.

¿Alguna idea de cómo puedo hacer un clic de control de usuario completo, incluso si se hace clic en una etiqueta en el control?

Si esta pregunta no está clara o si necesita más información, deje un comentario.

Estoy haciendo esto en C#.

Gracias!

Respuesta

11

El evento de clic del control del usuario no se activará cuando se haga clic en otro control en el control del usuario. Debe vincular manualmente el evento de clic de cada elemento. Esto se puede hacer con un simple bucle de código subyacente del control de usuario:

foreach (Control control in Controls) 
{ 
    // I am assuming MyUserControl_Click handles the click event of the user control. 
    control.Click += MyUserControl_Click; 
} 

Después de este pedazo de código workd, MyUserControl_Click se disparará cuando se hace clic en cualquier control del control de usuario.

+0

¡increíble! esto ayudó totalmente. ¡Gracias un montón! – CodeLikeBeaker

+1

¡Gracias! Tenga en cuenta que debe incluir un add/remove recursivo para los controles que están dentro de los controles (por ejemplo, controles dentro de un panel) –

+0

También no debe olvidar comprobar los tipos de objetos en su método de evento: 'public void MyUserControl_Click (Object Sender , EventArgs e) {if (sender.GetType() es Label) {...}} '. De lo contrario, podría tener problemas fácilmente. – libjup

0
foreach (Control c in this.Controls) 
    { 
     c.Click += new EventHandler(SameAsForm_Click); 
    } 

Tenga en cuenta que esto no va a añadir clickevents etiquetas en groupboxes, paneles, etc a la -EventHandler "SameAsForm_Click".

Cuestiones relacionadas