2008-11-18 57 views

Respuesta

72

La opción simple es sólo para establecer AcceptButton de las formas que el botón que desea presionado (por lo general en "OK", etc):

TextBox tb = new TextBox(); 
    Button btn = new Button { Dock = DockStyle.Bottom }; 
    btn.Click += delegate { Debug.WriteLine("Submit: " + tb.Text); }; 
    Application.Run(new Form { AcceptButton = btn, Controls = { tb, btn } }); 

Si esto no es una opción, se puede ver en el evento KeyDown etc, pero que es más trabajo ...

TextBox tb = new TextBox(); 
    Button btn = new Button { Dock = DockStyle.Bottom }; 
    btn.Click += delegate { Debug.WriteLine("Submit: " + tb.Text); }; 
    tb.KeyDown += (sender,args) => { 
     if (args.KeyCode == Keys.Return) 
     { 
      btn.PerformClick(); 
     } 
    }; 
    Application.Run(new Form { Controls = { tb, btn } }); 
28

la manera habitual de hacer esto es para establecer el Form 's AcceptButton al botón que desea 'clic'. Puede hacerlo en el diseñador VS o en el código y el AcceptButton se puede cambiar en cualquier momento.

Esto puede o no ser aplicable a su situación, pero he usado esto junto con GotFocus eventos para diferentes TextBox es en mi formulario para permitir un comportamiento diferente según el lugar donde el usuario presiona Enter. Por ejemplo:

void TextBox1_GotFocus(object sender, EventArgs e) 
{ 
    this.AcceptButton = ProcessTextBox1; 
} 

void TextBox2_GotFocus(object sender, EventArgs e) 
{ 
    this.AcceptButton = ProcessTextBox2; 
} 

Una cosa a tener cuidado al usar este método es que no dejar el conjunto AcceptButton a ProcessTextBox1 cuando TextBox3 se enfoca. Recomendaría utilizar el evento LostFocus en el TextBox que establece el AcceptButton, o crear un método GotFocus que todos los controles que no usan una llamada específica AcceptButton.

+1

+1 Mejor respuesta que pienso! – GETah

0

Esto es muy válida para Windows Forms. Sin embargo, en WPF necesita hacer las cosas de manera diferente, y es más fácil. Establezca IsDefault propiedad del botón relevante para esta área de texto como verdadera.

Una vez que haya terminado de capturar la tecla Intro, no olvide alternar las propiedades en consecuencia.

10

Me encontré con esto mientras buscaba lo mismo, y lo que observo es que ninguna de las respuestas enumeradas en realidad proporciona una solución cuando no desea hacer clic en 'aceptar botón' en un formulario al presionar enter.

Un caso de uso simple sería un cuadro de búsqueda de texto en una pantalla donde presionar enter debería 'hacer clic' en el botón 'Buscar', no ejecutar el comportamiento AcceptButton del formulario.

Este pequeño fragmento hará el truco;

private void textBox_KeyPress(object sender, KeyPressEventArgs e) 
{ 
    if (e.KeyChar == 13) 
    { 
     if (!textBox.AcceptsReturn) 
     { 
      button1.PerformClick(); 
     } 
    } 
} 

En mi caso, este código es parte de un control de usuario personalizada derivada de cuadro de texto y el control de la propiedad tiene un 'ClickThisButtonOnEnter'. Pero lo anterior es una solución más general.

+1

Además, puede establecer 'e.Handled' a' true' para evitar el pitido. – Ruud

+0

¡Guau, limpio y fácil, me gusta! – IamBatman

25
private void textBox_KeyDown(object sender, KeyEventArgs e) 
{ 
    if (e.KeyCode == Keys.Enter) 
    { 
     button.PerformClick(); 
     // these last two lines will stop the beep sound 
     e.SuppressKeyPress = true; 
     e.Handled = true; 
    } 
} 

Enlazar este evento KeyDown al cuadro de texto y, a continuación, cuando cada vez que se pulsa una tecla, se disparó este evento.Dentro del evento, comprobamos si el usuario ha pulsado tecla "Enter", si es así, se puede realizar la acción

+0

¿Podría agregar alguna explicación? –

+1

Prefiero esta respuesta, es de lejos la más simple. – chwi

+2

¿Por qué no usar simplemente * Botón Aceptar *? –

3

solución más amigable para los principiantes es: 1. en su Designer, haga clic en el campo de texto que desea que esto ocurra . En la ventana de propiedades (predeterminado: abajo a la derecha), haga clic en Thunderbolt (Eventos). Este ícono está al lado del ícono de ordenamiento alfabético y el ícono de propiedades.

2. desplácese hacia abajo hasta keyDown. Haga clic en el campo desplegable que se encuentra a la derecha. Notarás que no hay nada allí, así que simplemente presiona enter. Visual Studio le escriba el siguiente código:

private void yourNameOfTextbox_KeyDown(object sender, KeyEventArgs e) 
    { 

    } 

3. entonces simplemente pegar esta entre los corchetes:

if (e.KeyCode == Keys.Enter) 
{ 
    yourNameOfButton.PerformClick(); 
} 

esto actuará como lo habría hecho clic en él.

¡salud! phil

3

Simplemente configure el formulario "Acepte el botón" Propiedad al botón que desea presionar la tecla Intro. O en el caso de carga de escritura this.acceptbutton = btnName;

+0

solución perfecta para mí. Gracias – Nuno

1
this.textboxName.KeyDown += (sender, args) => { 
       if (args.KeyCode == Keys.Return) 
       { 
        buttonName.PerformClick(); 
       } 
      }; 

Esto, unido al método initialize

1

O simplemente puede utilizar este sencillo código de revestimiento 2 :)

if (e.KeyCode == Keys.Enter) 
      button1.PerformClick(); 
Cuestiones relacionadas