2008-08-16 10 views
5

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ñas, así que si el usuario presiona Tab en el segundo cuadro de texto, solo debería 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 debe obtener 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 en la pestaña de imprenta, existe este caso especial en el que se debe omitir un control en el formulario.Anula el comportamiento de la pestaña en WinForms

Al usar ProcessDialogKey, he logrado que funcione, 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 de una pestaña o Shift-Tab y luego hago las cosas más raras, pero si el usuario hace clic en el control, no quiero hacer nada especial.

Respuesta

3

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

Ahora, una vez dicho esto, también he infringido esta regla a petición del cliente. Hicimos que la tecla Intro funcione como la tecla de tabulación, donde la tecla Intro guardará el valor en un campo de texto y avanzará el cursor al siguiente campo.

1

No creo que haya una forma integrada de hacerlo. Se invocan todos los eventos de foco de WinForms (GotFocus, LostFocus, Enter, Leave) con parámetros de EventArgs vacíos, que no le darán ninguna información adicional.

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

0

Estoy de acuerdo con DannySmurf. Si te equivocas con el orden de las pestañas, es posible que te preocupes si cambian los requisitos de la aplicación.

Otra cosa que podría hacer es implementar algún tipo de asistente para que el usuario pueda pasar.

1

El motivo de este comportamiento de tabulación impar es todo acerca de la velocidad en el proceso de entrada. Fue realmente bueno obtener algo de información, no había pensado en deshabilitar un cuadro de texto, pero en realidad podría funcionar. Pero usar la tecla Enter para aceptar la entrada ni siquiera se me cruzó por la mente. 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 será el activo. Es como tener el pastel y comérselo también, el factor de velocidad está ahí ya que cuando se usa la tecla enter no se debe hacer tabulación innecesaria para llegar al campo correcto y usar la tecla enter al lado del teclado numérico lo hace realmente suave.

Gracias por la entrada!

0

Mejor que deshabilitar los controles, intente monkeying con TabStop - si esto es falso, el control se saltará simplemente al tabular.

También sugiero que el evento Modificado del TextBox sea el lugar para actualizar TabStop en los otros controles.

He hecho algo similar a esto con un control de inicio de sesión, donde los usuarios pueden 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 hacer el trabajo.

Cuestiones relacionadas