web-dev-qa-db-fra.com

Comment puis-je accepter la touche de retour arrière dans l'événement de frappe?

Ceci est mon code:

private void txtAdd_KeyPress(object sender, KeyPressEventArgs e)
{
    if (!(char.IsLetter(e.KeyChar)) && !(char.IsNumber(e.KeyChar)) && !(char.IsWhiteSpace(e.KeyChar)))
    {
        e.Handled = true;
    }
}

Cela me permet de saisir des lettres, des chiffres et des espaces, mais pas de revenir en arrière. Aidez-moi, s'il vous plaît.

24
Buloy

J'aime utiliser !Char.IsControl (e.KeyChar) afin que tous les caractères de "contrôle" comme la touche Retour arrière et les raccourcis clavier du presse-papiers soient exemptés.

Si vous voulez juste vérifier le retour arrière, vous pouvez probablement probablement vous échapper avec:

if (e.KeyChar == (char)8 && ...)
32
Matt Hamilton

J'utilise beaucoup les deux segments suivants:

Celui-ci permet de restreindre un champ de texte à un entier, mais en autorisant les clés de contrôle:

if (Char.IsDigit(e.KeyChar)) return;
if (Char.IsControl(e.KeyChar)) return;
e.Handled = true;

Celui-ci pour restreindre un champ de texte à doubler, permettant un '.' seulement, et permettant les touches de contrôle:

if (Char.IsDigit(e.KeyChar)) return;
if (Char.IsControl(e.KeyChar)) return;
if ((e.KeyChar == '.') && ((sender as TextBox).Text.Contains('.') == false)) return;
if ((e.KeyChar == '.') && ((sender as TextBox).SelectionLength == (sender as TextBox).TextLength)) return;
e.Handled = true;
17
Wanabrutbeer

Vous devez ajouter! (Char.IsControl (e.KeyChar)) dans votre phrase et le tour est joué.

private void txtNombre_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (!(char.IsLetter(e.KeyChar)) && !(char.IsNumber(e.KeyChar)) && !(char.IsControl(e.KeyChar)) && !(char.IsWhiteSpace(e.KeyChar)))
            {
                e.Handled = true;
            }
        }
5
Gaby

La touche de retour arrière n'est pas déclenchée par l'événement KeyPress. Vous devez donc le saisir dans les événements KeyDown ou KeyUp et définir la propriété SuppressKeyPress sur true pour empêcher la touche Retour arrière de modifier votre texte dans la zone de texte:

private void txtAdd_KeyDown(object sender, KeyEventArgs e)
{
    if (e.KeyCode == Keys.Back)
    {
        e.SuppressKeyPress = true;
    }
}
3
Huy Nguyen

De la documentation:

L'événement KeyPress n'est pas déclenché par des clés autres que des caractères; Toutefois, les clés non-caractères déclenchent les événements KeyDown et KeyUp.

1
Ed S.
private void KeyPressNameSurname(object sender, KeyPressEventArgs e)
 {
     if (char.IsPunctuation(e.KeyChar) || char.IsSymbol(e.KeyChar) || char.IsDigit(e.KeyChar) )
     {
        e.Handled = true;
        myTextBox.Text = "Not Valid";
        myTextBox.Visible = true;
     }
     else
     {
        myTextBox.Visible = false;
     }
  }
0
Nasuh Levent YILDIZ