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 elSuppressKeyPress
que hizo el truco.ToolStripTextBox.KeyDown
. Ninguna otra solución lo hizo. ¡Gracias!textbox
yKeyDown
Tratar
fuente
Tab
primero?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.Handled
ye.SuppressKeyPress
no funcionó para mí, todavía sonando. Pero cambiarlo como se sugiere aquí para usarKeyPress' event and
e.Handled` lo hizo bien.Úselo
SuppressKeyPress
para 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
KeyDown
matar 2 eventos adicionales en un solo golpe. Establecer lae.Handled
propiedad entrue
es inútil en este contexto.La mejor manera es establecer la
Form.AcceptButton
propiedad en el botón de búsqueda real.También hay otra forma de utilizar la
Enter
tecla: algunas personas pueden querer que actúe comoTAB
botón. Para hacer eso, agregue un nuevoButton
, establezca suLocation
propiedad fuera delForm
área (es decir(-100, -100)
); establecer laVisible
propiedad enfalse
puede deshabilitar losButton
controladores en algunos casos. Establezca laForm.AcceptButton
propiedad en su nuevo botón. En elClick
controlador de eventos, agregue el siguiente códigothis.SelectNextControl(ActiveControl, true, true, true, true)
Ahora, es posible que desee transferir
focus
solo cuandofocus
seaTextBox
posible que desee probar elActiveControl
tipo o usar lae.Supress
propiedad en los controladores de eventos de los controles que no deben usarseEnter
comoTAB
Eso es todo. Ni siquiera necesitas capturare.KeyCode
fuente
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.
AcceptButton
parece más elegante, pero estoy acostumbrado aIsDefault
mí 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
Multiline
código es completamente irrelevante.