2012-06-04 2 views
4

Avoir un contrôle TextBox (DevExpress TextEdit pour être précis) à l'intérieur d'une forme WinForms, je ne pas le formulaire doit fermer lorsque l'utilisateur appuie sur la touche Entrée , si le focus est à l'intérieur de la zone de texte.Comment ne pas fermer un formulaire lorsque l'utilisateur appuie entrer la clé dans une zone de texte

Je pensais que

filterTextBox.KeyDown += 
    (sender, e) => 
     e.Handled = e.KeyCode == Keys.Return || e.KeyCode == Keys.Enter; 

serait suffisant, mais il semble être ignoré et la forme ferme encore.

Ma question est:

Comment ignorer intentionnellement l'entrer à l'intérieur d'un seul contrôle de la zone de texte en ligne de sorte que la forme reste ouverte?

Solution

The solution of Botz3000 a fonctionné pour moi:

filterTextBox.PreviewKeyDown += 
    (sender, e) => 
     e.IsInputKey = e.KeyCode == Keys.Return || e.KeyCode == Keys.Enter; 
filterTextBox.KeyDown += 
    (sender, e) => 
     e.Handled = e.KeyCode == Keys.Return || e.KeyCode == Keys.Enter; 

Répondre

6

Mise à jour: Essayez gestion de l'événement PreviewKeyDown aussi. La documentation MSDN l'explique plutôt bien dans la section Remarques. En définissant IsInputKey à true, vous pouvez remplacer le comportement par défaut afin que votre TextBox puisse gérer la clé. Vous devrez le faire dans PreviewKeyDown, puis gérer la clé comme vous le faites déjà dans KeyDown.

EDIT: ne fonctionne pas: Auparavant suggéré EnterMoveNextControl propriété

+0

Merci, @ Botz3000, juste essayé, semble être ignoré, aussi. –

+1

@UweKeim J'ai mis à jour ma réponse. On dirait que vous devez aussi gérer 'PreviewKeyDown' de sorte que la touche enter ne soit pas ignorée par le TextBox. – Botz3000

+0

A travaillé, parfaitement, merci beaucoup! :-) –

1

Sans chercher moi-même, je pense que je voudrais simplement mettre un booléen dans le KeyDown de la zone de texte, puis la fermeture de formulaire, vérifiez que booléens et annuler la forme la fermeture si elle est définie (et puis réinitialiser le booléen).

2

Basé sur la solution de votre gars, sur le RichTextBoxla manipulation PreviewKeyDown a été assez bon. Merci! :)

private void rtbNote_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e) 
    { 
     e.IsInputKey = e.KeyCode == Keys.Return || e.KeyCode == Keys.Enter; 
    } 
Questions connexes