2012-03-13 13 views
7

Tengo un control de usuario llamado GameButton que tiene una etiqueta dentro. Cuando agrego el control de usuario a mi formulario y le agrego un evento de clic, se activa al hacer clic en el fondo del botón personalizado, pero no en el texto de la etiqueta. ¿Cómo arreglaría esto sin agregar un montón de eventos de clic dentro del código de controles del usuario?El evento de clic de control del usuario no funciona al hacer clic en el texto dentro del control?

edición: marco de interfaz de usuario: winforms

+0

marco de interfaz de usuario (Windows Forms, WPF, formularios web, MVC)? –

+0

lo siento, WinForms – Oztaco

+0

También por favor, evitar la inclusión de etiquetas que tienen poco o nada que ver con su pregunta (por ejemplo, visual-studio) –

Respuesta

10

Si te estoy entendiendo correctamente, su usercontrol GameButton se disparará el evento cuando se hace clic en, pero no cuando se hace clic en la etiqueta en - y quiere tanto. Esto se debe a que la etiqueta (un control) está en la parte superior del fondo. Por lo tanto, también debe registrar su etiqueta con el evento click. Esto puede hacerse manualmente en el diseñador o programáticamente para cada control en la página.

Si usted quiere hacer todos los controles en el control de usuario, poner esto en caso OnLoad del control de usuario y se puede utilizar el mismo evento de clic para cada control:

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

public void yourEvent_handler_click (object sender, EventArgs e){ 
    //whatever you want your event handler to do 
} 

EDIT: La mejor manera es crear la haga clic en la propiedad del controlador de eventos en el control del usuario. De esta forma, cada vez que agrega/elimina un evento de clic a su control de usuario, lo agrega/elimina a todos los controles dentro del control de usuario automáticamente.

public new event EventHandler Click { 
     add { 
      base.Click += value; 
      foreach (Control control in Controls) { 
       control.Click += value; 
      } 
     } 
     remove { 
      base.Click -= value; 
      foreach (Control control in Controls) { 
       control.Click -= value; 
      } 
     } 
    } 

Esto es según otra post:

Espero que esto ayude!

+0

Quería poder agregar eventos de clic a mis botones personalizados de la misma manera que lo hace con los botones normales del diseñador, pero no afectan a la etiqueta – Oztaco

+0

. No estoy seguro de entender @EfeOzturkoglu. ¿Desea que su usercontrol sea como si fuera un botón normal en el que puede hacer clic en cualquier lugar con un controlador de eventos? – ImGreg

+0

sí, como no quiero tener que agregar un controlador al control Y a la etiqueta dentro de él cada vez, solo agrégalo una vez cada vez que creo una nueva instancia del botón – Oztaco

0

hacer que la propiedad "activar" de las etiquetas "falso, entonces los eventos del ratón funcionará en el control del usuario.

Cuestiones relacionadas