net - C#: ¿Cómo hacer que al presionar enter en un cuadro de texto se dispare un botón, y aún así se permiten accesos directos como "Ctrl+A"?
onkeypress c# (4)
¿No puede utilizar AcceptButton
en la ventana de propiedades de formularios? Esto establece el comportamiento predeterminado para la pulsación de la tecla Intro , pero aún puede utilizar otros accesos directos.
Lo siento por el título largo, pero no pude pensar en otra forma de decirlo.
Tengo esto:
private void textBoxToSubmit_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter)
{
buttonSubmit_Click((object)sender, (EventArgs)e);
}
}
... para hacer clic en enter en el cuadro de texto, active el botón "enviar". Sin embargo, esto también evita que los atajos pasen. (No estoy seguro de qué tiene que ver con eso, ¿quizás solo combos de varias teclas?)
ShortcutsEnabled se establece en true.
¡Gracias por adelantado!
No necesita ningún código del lado del cliente si hacer esto es ASP.NET. El siguiente ejemplo es un cuadro de entrada de refuerzo con un botón de búsqueda con un icono impresionante.
Verás 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 hace el truco.
En el ejemplo a continuación, después de escribir algo en el cuadro de texto de entrada, simplemente presiona Intro y eso resultará en 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>
Puede usar KeyPress en lugar de KeyUp o KeyDown es más eficiente y aquí le indicamos cómo manejar
private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
if (e.KeyChar == (char)Keys.Enter)
{
e.Handled = true;
button1.PerformClick();
}
}
espero que funcione
Si desea que el retorno desencadene una acción solo cuando el usuario está en el cuadro de texto, puede asignar al botón deseado el control AcceptButton, de esta manera.
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
}