2010-04-23 15 views
24

Esto puede ser una pregunta básica, pero tengo que admitir que nunca he entendido realmente cuál es la diferencia entre los eventos Control.Enter y Control.GotFocus.¿Cuál es la diferencia entre los eventos Control.Enter y Control.GotFocus?

http://msdn.microsoft.com/en-us/library/system.windows.forms.control.enter.aspx http://msdn.microsoft.com/en-us/library/system.windows.forms.control.gotfocus.aspx

¿Es una diferenciación entre la captura de teclado o ratón de entrada o alguna otra cosa?

Respuesta

18

Los eventos GotFocus/LostFocus son generados por mensajes de Windows, WM_SETFOCUS y WM_KILLFOCUS respectivamente. Son un poco problemáticos, especialmente WM_KILLFOCUS, que es propenso a un punto muerto. La lógica dentro de Windows Forms que maneja la lógica de validación (Validación de eventos, por ejemplo) puede anular los cambios de enfoque. En otras palabras, el foco realmente cambió pero luego el código de validación lo movió hacia atrás. El estado lógico de su IU es que nunca se movió y usted no debe saber que sí lo hizo.

Los eventos de Entrar/Salir evitan el tipo de problemas que estos eventos de notificación de cambio de foco de bajo nivel pueden causar, se generan cuando Winforms ha establecido el foco verdadero. Casi siempre quieres usar estos.

3

El evento Control.Enter ocurre cuando un control se enfoca por primera vez. Mientras Control.GotFocus sucede CADA vez, un control obtiene el foco. Por ejemplo, tiene 'textBox1' que ya tiene el foco y llama a textBox1.Focus(), el evento GotFocus siempre se activará en esta instancia, a diferencia del evento Enter que solo se activará si un control no tiene el foco y lo recibe por primera vez.

Cuestiones relacionadas