Tengo cuadros de texto en mi aplicación de Windows Forms, y quiero que cuando el usuario presiona la tecla ENTER, el cursor pasa al siguiente cuadro de texto.

¿Cómo puedo hacer esto?

Es este un buen hábito o debo evitar? En realidad, los usuarios son mucho más propensos y se han adaptado y se han convertido en habituales de presionar la tecla ENTRAR para la navegación entre los cuadros de texto y botones. Así, para ellos necesito hacer esto.

El favor de ayudarme con el código completo el uso de dos cuadros de texto como un ejemplo.

InformationsquelleAutor sqlchild | 2011-04-09

6 Comentarios

  1. 6

    Yo diría que la mejor forma es crear un control de usuario que hereda de cuadro de texto y, a continuación, reemplace el OnKeyPress método para la captura de introducir y enviar una ficha. Enfoque para luego ser entregado a la siguiente TabIndex en el formulario, como si de una ficha en realidad, había sido introducido.

    El siguiente código hace exactamente eso:

    public partial class CustomTextbox : TextBox
    {
        public CustomTextbox()
        {
            InitializeComponent();            
        }
    
        protected override void OnKeyPress(KeyPressEventArgs e)
        {
            if (e.KeyChar == '\r')
            {
                e.Handled = true;
                SendKeys.Send("{TAB}");
            }
    
        }
    } 

    También podría poner un código similar en el KeyPress controladores de eventos para los controles, pero esto ahorra una gran cantidad de código duplicado y unnececessary controlador de eventos.

    Como si esta es una buena práctica – yo diría que, en general, no, cambiar el comportamiento por defecto de formas nunca es una buena idea, pero claro, si esto es lo que sus usuarios quieren y esperan, a continuación, es su decisión.

    • señor, ¿controles como los cuadros de texto o botones no tienen OnKeyPress método? cuando escribí button1. y desprotegido en el IntelliSense , entonces no existe tal método? por qué así?
    • así que , según usted, voy a crear primero un nuevo proyecto de control de usuario en visual studio y poner el código , y el uso que de control en otros winform proyectos añadiendo en la caja de herramientas?
    • también, señor, no hay ningún evento OnKeyPress cuando veo en las Propiedades de un cuadro de texto pulsando la tecla F4.
    • No estoy seguro de lo que su pregunta está aquí. Todos los controles tienen el método OnKeyPress – pero es un método protegido de la clase de Control que se heredan de. Así que para hacer algo con esto usted necesita para reemplazar el método como he demostrado (en un control de la hereda de cuadro de texto, por ejemplo), o manejar el método de Pulsación de tecla.
    • por ahora usted no necesita un nuevo proyecto, un nuevo control de usuario que se hereda de cuadro de texto – y sí, que lo añada a su caja de herramientas. Y lo siento, yo debería haber escrito KeyPress eventhandler.
    • y yo estoy en lo correcto por que, que tengo que crear un nuevo proyecto, biblioteca de controles de windows en VS y agregar su código?
    • ok señor, así lo haré : Proyecto–>Agregar Control de Usuario en mi proyecto existente?
    • No, no necesita un nuevo proyecto, sólo si desea volver a utilizar este control en varios proyectos. Todo lo que necesita hacer es agregar un nuevo control de usuario para el proyecto y, a continuación, cambiar la clase que hereda de cuadro de texto. Tuve que quitar también una línea de código autogenerado para que se compile.
    • Señor, cuando he añadido un Control de Usuario, a continuación, en el código de la línea fue : public partial class CustomTextbox : UserControl, pero como el código, he cambiado a : public partial class CustomTextbox : cuadro de texto, Pero su error al compilar:’Miproyecto.CustomTextBox.Dispose(bool)’: no existe el método adecuado encontró a reemplazar , pero de nuevo el cambio a la anterior din no quitar el error, el error está en CustomTextBox.El diseñador.cs archivo
    • usted probablemente tiene una falta de coincidencia en los nombres de clase entre el CustomTextbox y el diseñador, por lo que la clase parcial no está funcionando, y por lo tanto el reemplazo de disponer en el diseñador de falla. Verifique que los nombres de clase de partido.
    • gracias a su señor, se trabajó , también, estoy teniendo un botón , ahora tecla enter no se pulse el botón , tan solo es utilizado para la navegación. pero si quiero que la tecla Intro también presiona el botón , es decir, desde el cuadro de texto pulsando la tecla enter la ficha que va al botón , y en el botón cuando de nuevo se presiona la tecla, luego se debe presionar el botón? es posible?

  2. 5

    Esto es una mala idea. La interfaz de usuario estándar es para la TAB para moverse entre los campos de entrada. Su aplicación menos utilizable cuando usted elige no seguir bien las normas conocidas. Estas normas son lo que hace que la interfaz de usuario intuitiva.

    • Heffeman : señor, ¿puede darme el nombre de algún libro o enlaces en su escrito que es una mala idea para jugar con la tecla de RETORNO. realmente necesito mostrar a mi jefe, que es realmente una mala
    • leer ms instrucciones de experiencia de usuario. ENTRAR es para aceptar y cerrar un diálogo.
    • Puedo ir conforme a la norma siempre, porque tenemos que ir según los requisitos de los usuarios. Pesado formularios de entrada de datos necesidad de introducir la clave para la navegación, esta ha sido la práctica desde los días de DOS y Unix. Sólo una especificación creada por algunos de uno en MS no puede cambiar toda la práctica. por otra parte, También, comprobar el significado de «Entrar» y «Tab» en equipo normas!
  3. 1

    Por ejemplo, usted podría atrapar a OnKeyUp evento, compruebe si está de REGRESO y el proceso de control de fuente para utilizar Focus() al siguiente control…

  4. 1

    Sí, depende de usted

    Para una muestra, se puede colocar 4 cuadro de texto en el formulario y utilizar el siguiente código

    private void textBox1_KeyUp(object sender, KeyEventArgs e)
    {
        if (e.KeyCode == Keys.Enter)
        {
            textBox2.Focus();
        }
    }
    
    private void textBox2_KeyUp(object sender, KeyEventArgs e)
    {
        if (e.KeyCode == Keys.Enter)
        {
            textBox3.Focus();
        }
    }
    
    private void textBox3_KeyUp(object sender, KeyEventArgs e)
    {
        if (e.KeyCode == Keys.Enter)
        {
            textBox4.Focus();
        }
    }

    Puede ayudar.

    Feliz codificación…

    • Para hacer más fácil que usted podría utilizar un único evento OnKeyUp y, usando switch(…) en el src de control, usted puede decidir que el control de Foco()…
    • no su trabajo señor, ¿tengo que hacer algo con el tabindexes?
    • Generar el evento de la forma para cada uno de los textbox del keyup. creo que se debe trabajar. Trate de colocar de nuevo los controles en el formulario.
  5. 0

    Sí que puede disparar el evento KeyDown o KeyUp en un cuadro de texto. Para comprobar si era la tecla enter, puede hacer lo siguiente:

    //e is the KeyEventArgs from the event.
    e.KeyCode == Keys.Enter

    Entonces, si se ha pulsado la tecla enter, se puede hacer:

    System.Windows.Forms.Control.SelectNextControl();

    Para establecer el orden de los controles, en Visual Studio busque este icono:

    http://i.stack.imgur.com/nZWLO.png

    Haga clic en él y usted va a ir a ficha el modo de ordenación, como me gusta llamarlo. Simplemente haga clic en los controles en el orden que deseen, y después de que haya terminado, haga clic en el pequeño icono de nuevo. Presto!

    Ahora si que es una buena idea de no, depende por completo de cómo se utiliza para que los usuarios finales. Si siempre la han utilizado como este, y que usted les da algo que no cabe en su mente modelo, van a decir que su software está roto.

    Siempre siempre siempre tratar de emular lo que los procesos que el usuario ya tiene en su cabeza.

    Leer esto si usted tiene el tiempo, es realmente una luz y muy buena lectura:

    http://www.joelonsoftware.com/uibook/fog0000000249.html

    • sir, SelectNextControl() no viene en mi IntelliSense? es un problema de versión de .net framework?
    • También puede hacer esto en su lugar, SendKeys.Send("{TAB}") en el evento KeyDown o KeyUp. Va a tener el mismo resultado final.
    • SendKeys.Send(«{TAB}») alude a la solución real!
  6. 0

    Creo que la mejor forma sería:

    1) asignar a cada cuadro de texto del atributo TabIndex de forma incremental (la primera es x, la próxima es x+1, etc).

    2) capturar en el evento OnKeyUp en todo el formulario, compruebe el argumento para ver si la clave es VOLVER

    3) centrar el siguiente cuadro de texto utilizando su TabIndex. O simular la tecla TAB.

    Este código debería funcionar:

    private void Form1_KeyUp(object sender, KeyEventArgs e)
    {
        if (e.KeyCode == Keys.Enter)
        {
            GetNextControl((TextBox)sender, true);
        }
    }

    De esta manera terminarás escribiendo una única función, y usted puede tener muchos cuadros de texto como desee.

    • este din no funciona

Dejar respuesta

Please enter your comment!
Please enter your name here