2009-07-28 9 views
19

Questo è il mio codice:Come posso accettare il tasto backspace nell'evento keypress?

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

Mi permette di inserire lettere, numeri e spazi, ma non permette che io faccia backspace. Mi aiuti per favore.

risposta

29

Mi piace usare !Char.IsControl (e.KeyChar) in modo che tutti i caratteri di "controllo" come il tasto di backspace e le scorciatoie da tastiera degli Appunti siano esenti.

Se si desidera solo per verificare la presenza di backspace, è possibile probabilmente farla franca:

if (e.KeyChar == (char)8 && ...) 
+0

Appena testato, il confronto con (char) 8 funziona davvero. –

+11

Potrebbe essere meglio usare ''\ b'' su' (char) 8'. –

+5

@AlexHumphrey Penso che sia ancora meglio '(char) Keys.Back' – Antonio

1

Dalla documentazione:

L'evento KeyPress non sia aumentata di chiavi noncharacter; tuttavia, i tasti non caratteri aumentano gli eventi KeyDown e KeyUp.

+4

In tal caso la documentazione è errata. Ho provato (char) 8 dall'evento KeyPress ed è decisamente aumentato. –

+0

+1 Sono pienamente soddisfatto di Ed S. perché usare 'type casting 'quando abbiamo gli eventi' key up' e 'key down'. In casi normali dovremmo evitare il "tipo casting". dovremmo usare 'type casting 'quando non abbiamo altre alternative. –

17

utilizzo i due seguenti segmenti sacco:

Questo per limitare una casella di testo a intero solo, ma permettendo tasti di controllo:

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

Questo per restricing una casella di testo a doppio, permettendo uno '.' solo e consentendo le chiavi di controllo:

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; 
4

Il tasto backspace non generato dall'evento KeyPress. Quindi è necessario prendere in eventi KeyDown o KeyUp e impostare la proprietà SuppressKeyPress è vero per prevenire il cambiamento backspace chiave il testo in testo:!

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

+1 per l'utilizzo di Chiavi.backa –

+1

Il backspace aumenta un evento di pressione tasto – Antonio

-1
private void Keypressusername(object sender, KeyPressEventArgs e) 
{ 
    e.Handled = !(char.IsLetter(e.KeyChar)); 
    if (char.IsControl(e.KeyChar)) 
    { 
     e.Handled = !(char.IsControl(e.KeyChar)); 
    } 
    if (char.IsWhiteSpace(e.KeyChar)) 
    { 
     e.Handled = !(char.IsWhiteSpace(e.KeyChar)); 
    } 
} 
+0

Sebbene questo esempio di codice possa eventualmente rispondere alla domanda, sarebbe preferibile includere una spiegazione essenziale della risposta. Così com'è ora questa risposta aggiunge poco o nessun valore per i futuri lettori. –

0
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; 
    } 
    } 
4

si deve aggiungere (char.IsControl (e.KeyChar)) nella tua frase e basta.

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; 
      } 
     } 
Problemi correlati