2010-02-06 11 views
26

Perdón por el título largo, pero no se me ocurrió otra manera de expresarlo.C#: ¿Cómo hacer que presionar enter en un cuadro de texto active un botón, y aun así permitir el acceso directo a atajos como "Ctrl + A"?

tengo esto:

private void textBoxToSubmit_KeyDown(object sender, KeyEventArgs e) 
    { 
     if (e.KeyCode == Keys.Enter) 
     { 
      buttonSubmit_Click((object)sender, (EventArgs)e); 
     } 
    } 

... con el fin de hacer pulsando Entrar en el cuadro de texto activar el botón "enviar". Sin embargo, esto también evita que los accesos directos pasen. (no estoy seguro de qué tiene que ver con eso, ¿quizás solo combos multi-clave?)

ShortcutsEnabled está establecido en verdadero.

¡Gracias de antemano!

+0

No repro, no esperaba ninguna. Necesitará e.SuppressKey = true para detener el pitido. –

+0

En cuanto al título: podría haber puesto la parte todavía en la primera oración de su cuerpo de pregunta. La primera frase ahora está fuera de tema de todos modos. – Bitterblue

Respuesta

37

¿No puede usar AcceptButton en la ventana de propiedades de formularios? Esto establece el comportamiento predeterminado para el Ingrese presionando la tecla, pero aún puede usar otros accesos directos.

+0

¡Ya veo! Gracias por aclarar esto. Obviamente soy nuevo en C#, por lo que cosas tan simples como esta me confunden. Gracias! –

+0

No hay problema - feliz de ayudar :) –

+0

¿y si quieres múltiples controles para aceptar cada entrada, sin embargo, y no necesariamente con un botón para cada uno? – Nyerguds

14

Si desea que la devolución active una acción solo cuando el usuario está en el cuadro de texto, puede asignarle al botón deseado el control AcceptButton, como este.

private void textBox_Enter(object sender, EventArgs e) 
    { 
     ActiveForm.AcceptButton = Button1; // Button1 will be 'clicked' when user presses return 
    } 

    private void textBox_Leave(object sender, EventArgs e) 
    { 
     ActiveForm.AcceptButton = null; // remove "return" button behavior 
    } 
+0

En caso de un UserControl, puede usar 'ParentForm.AcceptButton' –

10

Puede utilizar KeyPress en lugar de KeyUp o KeyDown su más eficiente y es cómo manejar

private void textBox1_KeyPress(object sender, KeyPressEventArgs e) 
    { 
     if (e.KeyChar == (char)Keys.Enter) 
     { 
      e.Handled = true; 
      button1.PerformClick(); 
     } 
    } 

esperemos que funcione

+0

¿Se puede expandir para los detectores de eventos de otros controles además de los botones? Parece que no puedo encontrar ningún ListBox.PerformDoubleClick() para activar su acción de doble clic. – Nyerguds

+0

Ah, no importa. Es más fácil simplemente llamar a la función del oyente subyacente. Por cierto ... este código no parece funcionar si el formulario tiene un conjunto AcceptButton. – Nyerguds

1

No es necesario ningún código del lado del cliente si hacer esto aquí es ASP.NET. El siguiente ejemplo es un cuadro de entrada boostrap con un botón de búsqueda con un ícono fontawesome.

Verá que en lugar de usar una etiqueta div> < regular con una clase de "grupo de entrada" he usado un asp: Panel. La propiedad DefaultButton establecida en el id de mi botón, funciona.

En el siguiente ejemplo, después de escribir algo en el cuadro de texto de entrada, solo presiona enter y eso dará como resultado un envío.

<asp:Panel DefaultButton="btnblogsearch" runat="server" CssClass="input-group blogsearch"> 
<asp:TextBox ID="txtSearchWords" CssClass="form-control" runat="server" Width="100%" Placeholder="Search for..."></asp:TextBox> 
<span class="input-group-btn"> 
    <asp:LinkButton ID="btnblogsearch" runat="server" CssClass="btn btn-default"><i class="fa fa-search"></i></asp:LinkButton> 
</span></asp:Panel> 
Cuestiones relacionadas