Pregunta

Tengo un UserControl que consta de tres cuadros de texto.En un formulario puedo tener uno o más o mi UserControl.Quiero implementar mi propio comportamiento de pestaña, de modo que si el usuario presiona Tab en el segundo cuadro de texto, solo debo pasar al tercer cuadro de texto si el segundo cuadro de texto tiene algo ingresado.Si no se ingresa nada en el segundo cuadro de texto, el siguiente control del formulario debería recibir el foco según el comportamiento normal de la pestaña.Si el usuario no ha ingresado nada en el primer o segundo cuadro de texto y presiona la pestaña, existe un caso especial en el que se debe omitir un control en el formulario.

Al usar ProcessDialogKey, logré que funcione bastante bien, pero todavía tengo un problema.Mi pregunta es si hay una manera de detectar cómo un control WinForms obtuvo el foco, ya que también me gustaría saber si mi UserControl obtuvo el foco desde una pestaña o Shift-Tab y luego hacer mis cosas raras, pero si el usuario hace clic en el control, No quiero hacer nada especial.

¿Fue útil?

Solución

Como regla general, diría que anular el comportamiento estándar de la tecla TAB sería una mala idea.Tal vez puedas hacer algo como desactivar el tercer cuadro de texto hasta que se realice una entrada válida en el segundo cuadro de texto.

Ahora bien, dicho esto, también he roto esta regla a petición del cliente.Hicimos que la tecla Intro funcionara como la tecla Tab, donde la tecla Intro guardaría el valor en un campo de texto y avanzaría el cursor al siguiente campo.

Otros consejos

No creo que haya una forma integrada de hacerlo.Todos los eventos de enfoque de WinForms (GotFocus,LostFocus,Enter,Leave) se llaman con parámetros EventArgs vacíos, que no le brindarán ninguna información adicional.

Personalmente, desactivaría el tercer cuadro de texto, como dijo Rob Thomas.Sin embargo, si está decidido a hacer esto, no sería difícil configurar un manual (lea:solución hackish).Una vez que se presiona la tecla tab (si el foco está en el segundo cuadro de texto), configure una variable dentro de su formulario.Si el siguiente objeto enfocado es el tercer cuadro de texto, entonces sabrás exactamente cómo sucedió.

La razón de este comportamiento extraño de la pestaña tiene que ver con la velocidad en el proceso de entrada.Fue realmente bueno recibir comentarios, no había pensado en deshabilitar un cuadro de texto, pero eso realmente podría funcionar.Pero usar la tecla Enter para aceptar la entrada ni siquiera se me había pasado por la cabeza.Eso funcionará mucho mejor.El usuario puede ingresar los números y luego presionar Enter para aceptar la entrada y el siguiente cuadro de texto posible será el activo.Es como tener el pastel y comérselo también. El factor de velocidad está ahí ya que al usar la tecla Intro no se deben realizar tabulaciones innecesarias para llegar al campo correcto y usar la tecla Intro al lado del teclado numérico lo hace realmente fluido.

¡Gracias por el aporte!

Estoy de acuerdo con DannySmurf.Jugar con el orden de las pestañas puede resultarle un infierno más adelante si cambian los requisitos de la aplicación.

Otra cosa que podrías hacer es implementar algún tipo de asistente para que lo siga el usuario.

Mejor que deshabilitar los controles, intente jugar con TabStop; si esto es falso, el control simplemente se omitirá al tabular.

También sugeriría que el evento Cambiado del TextBox sea el lugar para actualizar TabStop en los otros controles.

Hice algo similar a esto con un control de inicio de sesión, donde los usuarios podían ingresar un nombre de usuario o una dirección de correo electrónico (en campos separados), además de su contraseña, y tabStop es lo que usé para realizar el trabajo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top