J'ai une application Windows Forms très simple. Et, dans Windows (ou au moins Windows Forms Applications), lorsque vous appuyez sur Entrée pendant que vous vous trouvez dans un contrôle TextBox à une ligne, vous entendez un Ding. C'est un son déplaisant, qui indique que vous ne pouvez pas entrer de nouvelle ligne, car il s'agit d'une zone de texte d'une seule ligne.
Tout va bien. Cependant, dans mon formulaire, j'ai 1 zone de texte et un bouton de recherche. Et j'autorise l'utilisateur à effectuer une recherche en appuyant sur Entrée après avoir fini de taper, pour ne pas utiliser pour utiliser la souris. le bouton de recherche.
Mais ce son Ding se produit. C'est vraiment agaçant.
Comment pouvons-nous faire en sorte que le son ne joue pas du tout dans mon formulaire?
@ David H - Voici comment je détecte le fait d'appuyer sur Enter:
private void textBox1_KeyUp(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter)
{
// Perform search now.
}
}
Découvrez la propriété Form.AcceptButton . Vous pouvez l'utiliser pour spécifier un bouton par défaut pour un formulaire, dans ce cas, pour appuyer sur Entrée.
De la docs:
Cette propriété vous permet de désigner une action par défaut à exécuter lorsque l'utilisateur appuie sur la touche Entrée de votre application. Le bouton affecté à cette propriété doit être un IButtonControl figurant dans le formulaire actuel ou situé dans un conteneur du formulaire actuel.
Il existe également une propriété CancelButton lorsque l'utilisateur appuie sur échappement.
Ça marche pour moi:
private void textBox1_KeyDown(object sender, KeyEventArgs e)
{
//Se apertou o enter
if (e.KeyCode == Keys.Enter)
{
//enter key is down
this.doSomething();
e.Handled = true;
e.SuppressKeyPress = true;
}
}
Le SuppressKeyPress est le vrai truc. J'espère que cela vous aidera.
Essayer
textBox.KeyPress += new KeyPressEventHandler(keypressed);
private void keypressed(Object o, KeyPressEventArgs e)
{
if (e.KeyCode == Keys.Enter)
{
e.Handled = true; //this line will do the trick
}
}
Vous pouvez utiliser KeyPress au lieu de KeyUp ou KeyDown, qui est plus efficace. Voici comment gérer
private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
if (e.KeyChar == (char)Keys.Enter)
{
e.Handled = true;
button1.PerformClick();
}
}
et dire la paix au "Ding"
Ajoutez simplement e.SuppressKeyPress = true;
dans votre "if".
private void textBox1_KeyUp(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter)
{
//If true, do not pass the key event to the underlying control.
e.SuppressKeyPress = true; //This will suppress the "Ding" sound.*/
// Perform search now.
}
}
Utilisez SuppressKeyPress
pour arrêter le traitement continu de la frappe après sa manipulation.
public class EntryForm: Form
{
public EntryForm()
{
}
private void EntryTextBox_KeyDown(object sender, KeyEventArgs e)
{
if(e.KeyCode == Keys.Enter)
{
e.Handled = true;
e.SuppressKeyPress = true;
// do some stuff
}
else if(e.KeyCode == Keys.Escape)
{
e.Handled = true;
e.SuppressKeyPress = true;
// do some stuff
}
}
private void EntryTextBox_KeyUp(object sender, KeyEventArgs e)
{
if(e.KeyCode == Keys.Enter)
{
// do some stuff
}
else if(e.KeyCode == Keys.Escape)
{
// do some stuff
}
}
}
Il y a très peu de chance que quiconque parvienne à cette réponse, mais certaines autres réponses sont vraiment effrayantes. La suppression d'un événement sur KeyDown
tue deux événements supplémentaires en une grève. La définition de la propriété e.Handled
Sur true
est inutile dans ce contexte.
Le meilleur moyen est de définir la propriété Form.AcceptButton
Sur le bouton de recherche.
Il existe également un autre moyen d’utiliser la touche Enter
- certaines personnes voudront peut-être qu’elle agisse comme un bouton TAB
. Pour ce faire, ajoutez un nouveau Button
, définissez sa propriété Location
en dehors de la zone Form
(c'est-à-dire (-100, -100)
) - paramètre Visible
propriété sur false
peut désactiver Button
gestionnaires dans certains cas. Définissez la propriété Form.AcceptButton
Sur votre nouveau bouton. Dans le gestionnaire d'événements Click
, ajoutez le code suivantthis.SelectNextControl(ActiveControl, true, true, true, true)
Maintenant, vous voudrez peut-être transférer focus
que lorsque focus
le sur TextBox
, vous voudrez peut-être tester ActiveControl
saisir ou utiliser e.Supress
propriété dans les gestionnaires d'événements de contrôles non destinés à utiliser Enter
comme TAB
c'est tout. Vous n'avez même pas besoin de capturer e.KeyCode
Je suis tombé sur ce post en essayant de gérer un KeyDown, cela a fonctionné pour moi.
If e.KeyCode = Keys.Enter Then
e.SuppressKeyPress = True
btnLogIn.PerformClick()
End If
Suppression de la touche Appuyez d'empêcher que l'événement soit envoyé au contrôle sous-jacent. Cela devrait fonctionner si vous manipulez manuellement tout ce que la touche Entrée fera dans cette zone de texte. Désolé pour le Visual Basic.
$("#txtSomething").keypress(function (e) {
if (e.which == 13) {
e.Handled = true; //This will prevent the "Ding" sound
//Write the rest of your code
}
});
Définissez la propriété IsDefault de votre bouton de recherche sur true
. Cela en fera un bouton par défaut et il sera automatiquement cliqué lorsque vous appuierez sur Entrée.
Eh bien, j'ai vécu assez longtemps avec ce problème et l'ai examiné ici.
Après avoir réfléchi à cette question pendant un bon bout de temps et voulu trouver le moyen le plus simple de le réparer, j'ai trouvé le moyen le plus simple mais le moins élégant de le résoudre.
Voici ce que j'ai fait.
Cela a résolu tous les problèmes secondaires répertoriés dans ce fil, y compris le ToolStripMenu. Ma plus grande plainte était le BindingNavigator, quand je saisissais un numéro d'enregistrement dans la position actuelle pour naviguer et appuyer sur entrer.
Conformément à la question initiale selon laquelle le programmeur souhaitait une fonction de recherche lorsque le bouton Entrée était enfoncé, je mettais simplement le code de recherche dans le bouton OK invisible!
Jusqu'à présent, cela semble résoudre tous les problèmes, mais comme nous le savons tous avec Visual Studio, quelque chose va probablement surgir.
La seule autre manière élégante que je puisse imaginer serait d’écrire un nouveau cours de manipulation de frappe, ce qui représente beaucoup de travail pour la plupart de mes projets.