Tengo una aplicación de formularios Windows Forms muy simple. Y, en Windows (o, al menos, en las aplicaciones de Windows Forms), cuando presiona Intro mientras está dentro de un control TextBox de una sola línea, escucha un Ding. Es un sonido desagradable, que indica que no puede ingresar una nueva línea, porque es un TextBox de una sola línea.
Todo esto está bien. Sin embargo, en mi formulario, tengo 1 TextBox y un botón de búsqueda. Y estoy permitiendo que el usuario realice una búsqueda presionando Enter después de que haya terminado de escribir, para que no tenga que usar el mouse para hacer clic en el botón Buscar.
Pero se produce este sonido Ding. Es muy molesto.
¿Cómo podemos hacer que el sonido no se reproduzca en absoluto en mi formulario?
@David H - Así es como estoy detectando la presión de entrar:
private void textBox1_KeyUp(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter)
{
// Perform search now.
}
}
fuente

Respuestas:
Consulte la propiedad Form.AcceptButton . Puede usarlo para especificar un botón predeterminado para un formulario, en este caso para presionar Intro.
De los documentos:
También hay una propiedad CancelButton para cuando el usuario presiona escape.
fuente
this.AcceptButton = buttonOK; this.CancelButton = buttonCancel;Esto funciona para mi:
SuppressKeyPress es el verdadero truco. Espero que eso te ayude.
fuente
e.Handled = true;fue insuficiente; fue elSuppressKeyPressque hizo el truco.ToolStripTextBox.KeyDown. Ninguna otra solución lo hizo. ¡Gracias!textboxyKeyDownTratar
fuente
Tabprimero?Simplemente agregue
e.SuppressKeyPress = true;su declaración "si".fuente
Puede usar KeyPress en lugar de KeyUp o KeyDown, es más eficiente y aquí se explica cómo manejar
y dile paz al 'Ding'
fuente
KeyDown, usandoe.Handledye.SuppressKeyPressno funcionó para mí, todavía sonando. Pero cambiarlo como se sugiere aquí para usarKeyPress' event ande.Handled` lo hizo bien.Úselo
SuppressKeyPresspara detener el procesamiento continuo de la pulsación de tecla después de manipularla.fuente
Me encontré con esta publicación mientras intentaba manejar un KeyDown, esto funcionó para mí.
Al suprimir la pulsación de tecla, el evento no se envía al control subyacente. Esto debería funcionar si está manejando manualmente todo lo que hará la tecla Intro dentro de ese cuadro de texto. Lo siento por Visual Basic.
fuente
Hay muy pocas posibilidades de que alguien obtenga esta respuesta, pero algunas otras respuestas son realmente aterradoras. Supresión de eventos al
KeyDownmatar 2 eventos adicionales en un solo golpe. Establecer lae.Handledpropiedad entruees inútil en este contexto.La mejor manera es establecer la
Form.AcceptButtonpropiedad en el botón de búsqueda real.También hay otra forma de utilizar la
Entertecla: algunas personas pueden querer que actúe comoTABbotón. Para hacer eso, agregue un nuevoButton, establezca suLocationpropiedad fuera delFormárea (es decir(-100, -100)); establecer laVisiblepropiedad enfalsepuede deshabilitar losButtoncontroladores en algunos casos. Establezca laForm.AcceptButtonpropiedad en su nuevo botón. En elClickcontrolador de eventos, agregue el siguiente códigothis.SelectNextControl(ActiveControl, true, true, true, true)Ahora, es posible que desee transferir
focussolo cuandofocusseaTextBoxposible que desee probar elActiveControltipo o usar lae.Supresspropiedad en los controladores de eventos de los controles que no deben usarseEntercomoTABEso es todo. Ni siquiera necesitas capturare.KeyCodefuente
fuente
En WinForms, la tecla Enter produce un sonido Ding porque no se especifica la propiedad de formulario AcceptButton. Si no necesita un AcceptButton, el sonido ding se puede suprimir configurando el formulario KeyPreview en verdadero e ingrese el siguiente evento KeyPress:
No importa qué control esté activo, no habrá más sonido ding al presionar la tecla Enter. Dado que el orden de procesamiento de eventos clave es KeyDown, KeyPress y KeyUp, la tecla Enter seguirá funcionando para los eventos KeyDown de los controles.
fuente
Establezca la propiedad IsDefault de su botón de búsqueda en
true. Esto lo convertirá en un botón predeterminado y se hará clic automáticamente cuando se presione Enter.fuente
To specify the default button of a form, set the AcceptButton property of the form to the desired button.AcceptButtonparece más elegante, pero estoy acostumbrado aIsDefaultmí mismo.Bueno, viví con este problema el tiempo suficiente y lo busqué aquí.
Después de pensar en esto durante bastante tiempo y de querer la forma más sencilla de solucionarlo, se me ocurrió la forma más sencilla pero no tan elegante de solucionarlo.
Aquí esta lo que hice.
Esto resolvió todos los problemas secundarios enumerados en este hilo, incluido ToolStripMenu. Mi mayor queja fue el BindingNavigator, cuando ingresaba un número de registro en la posición actual para navegar y presionaba enter.
De acuerdo con la pregunta original en la que el programador quería una función de búsqueda cuando se presionó el botón Enter, simplemente puse el código de búsqueda en el botón OK invisible.
Hasta ahora, esto parece resolver todos los problemas, pero como todos sabemos con Visual Studio, es probable que surja algo.
La única otra forma elegante posible en la que podría pensar sería escribir una nueva clase de manejo de pulsaciones de teclas, que es mucho trabajo para la mayoría de mis proyectos.
fuente
Puede configurar su cuadro de texto multilínea en verdadero y luego presionar la tecla Intro.
fuente
Cambié las propiedades del cuadro de texto para un cuadro de texto de varias líneas y funciona para mí.
fuente
fuente
Multilinecódigo es completamente irrelevante.