J'ai une application Windows Forms très simple. Et, dans Windows (ou, au moins dans les applications Windows Forms), lorsque vous appuyez sur Entrée à l'intérieur d'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 sur 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 terminé de taper, afin qu'il n'ait pas à utiliser la souris pour cliquer sur 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 l'entrée en appuyant sur:
private void textBox1_KeyUp(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter)
{
// Perform search now.
}
}
la source
Réponses:
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.
À partir de la documentation:
Il existe également une propriété CancelButton lorsque l'utilisateur appuie sur échapper.
la source
this.AcceptButton = buttonOK; this.CancelButton = buttonCancel;
Ça marche pour moi:
Le SuppressKeyPress est vraiment le truc. J'espère que cela vous aidera.
la source
e.Handled = true;
était insuffisant; c'était leSuppressKeyPress
qui a fait l'affaire.ToolStripTextBox.KeyDown
. Aucune autre solution ne l'a fait. Merci!textbox
etKeyDown
Essayer
la source
Tab
abord?Ajoutez simplement
e.SuppressKeyPress = true;
votre déclaration "si".la source
Vous pouvez utiliser KeyPress au lieu de KeyUp ou KeyDown, c'est plus efficace et voici comment gérer
et dis la paix au 'Ding'
la source
KeyDown
, en utilisante.Handled
ete.SuppressKeyPress
ne fonctionnait pas pour moi - toujours sonnant. Mais le changer comme suggéré ici pour utiliser l'KeyPress' event and
e.Handled` l'a bien fait.Utilisez
SuppressKeyPress
pour arrêter le traitement continu de la frappe après l'avoir manipulée.la source
Je suis tombé sur ce post en essayant de gérer un KeyDown qui a fonctionné pour moi.
Suppression de la touche Appuyez sur arrête l'envoi de l'événement au contrôle sous-jacent. Cela devrait fonctionner si vous gérez manuellement tout ce que la touche Entrée fera dans cette zone de texte. Désolé pour Visual Basic.
la source
Il y a très peu de chances que quiconque parvienne à cette réponse, mais certaines autres réponses sont vraiment effrayantes. La suppression d'un événement sur
KeyDown
tue 2 événements supplémentaires en un seul coup. Définir lae.Handled
propriété surtrue
est inutile dans ce contexte.Le meilleur moyen est de définir la
Form.AcceptButton
propriété sur le bouton de recherche réel.Il existe également une autre façon d'utiliser la
Enter
clé - certaines personnes peuvent vouloir qu'elle agisse comme unTAB
bouton. Pour ce faire, ajoutez une nouvelle propriétéButton
, définissez saLocation
propriété en dehors de laForm
zone (c'est-à-dire(-100, -100)
) - laVisible
propriété de définition surfalse
peut désactiver lesButton
gestionnaires dans certains cas. Définissez laForm.AcceptButton
propriété sur votre nouveau bouton. Dans leClick
gestionnaire d'événements, ajoutez le code suivantthis.SelectNextControl(ActiveControl, true, true, true, true)
Désormais, vous souhaiterez peut-être transférer
focus
uniquement lorsquefocus
cela est activé,TextBox
vous souhaiterez peut-être tester leActiveControl
type ou utiliser lae.Supress
propriété dans les gestionnaires d'événements de contrôles non destinés à être utilisésEnter
commeTAB
c'est tout. Vous n'avez même pas besoin de capturere.KeyCode
la source
la source
Sur WinForms, la touche Entrée provoque un son Ding car la propriété de formulaire AcceptButton n'est pas spécifiée. Si vous n'avez pas besoin d'un AcceptButton, le son de ding peut être supprimé en définissant le formulaire KeyPreview sur true et en entrant l'événement KeyPress suivant:
Quel que soit le contrôle actif, il n'y aura plus de bruit sourd lorsque vous appuyez sur la touche Entrée. Puisque l'ordre de traitement des événements clés est KeyDown, KeyPress et KeyUp, la touche Entrée fonctionnera toujours pour les événements KeyDown des contrôles.
la source
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 appuyez sur Entrée.la source
To specify the default button of a form, set the AcceptButton property of the form to the desired button.
AcceptButton
semble plus élégant, mais je suis habitué àIsDefault
moi-même.Eh bien, j'ai vécu assez longtemps avec ce problème et je l'ai cherché ici.
Après avoir réfléchi à cela pendant un certain temps et recherché le moyen le plus simple de le réparer, j'ai trouvé le moyen le plus simple mais pas si élégant de le réparer.
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, lorsque je saisissais un numéro d'enregistrement dans la position actuelle pour naviguer et appuyais sur Entrée.
Selon la question originale dans laquelle le programmeur voulait une fonction de recherche lorsque le bouton Entrée était enfoncé, j'ai simplement mis 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 se produire.
La seule autre manière élégante possible à laquelle je pourrais penser serait d'écrire une nouvelle classe de gestion des frappes, ce qui représente beaucoup de travail pour la plupart de mes projets.
la source
Vous pouvez définir votre zone de texte multiligne sur true, puis gérer la touche Entrée.
la source
J'ai changé les propriétés de zone de texte pour une zone de texte multiligne et cela fonctionne pour moi.
la source
la source
Multiline
code est complètement hors de propos.