2009-07-28 12 views
19

To jest mój kod:Jak mogę zaakceptować klawisz Backspace w zdarzeniu 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; 
    } 
} 

To pozwala mi wprowadzić litery, cyfry i spacje ale nie pozwala mi zrobić Backspace. Proszę pomóż mi.

Odpowiedz

29

Lubię używać !Char.IsControl (e.KeyChar), aby zwolnić wszystkie znaki "kontrolne", takie jak klawisz Backspace i skróty klawiaturowe schowka.

Jeśli chcesz tylko sprawdzić, Backspace, można prawdopodobnie uciec z:

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

Właśnie go przetestowaliśmy - porównanie z (char) 8 rzeczywiście działa. –

+11

Może lepiej użyć '' \ b'' ponad '(char) 8'. –

+5

@AlexHumphrey Myślę, że jeszcze lepiej jest '(char) Keys.Back' – Antonio

1

Z dokumentacji:

Impreza KeyPress nie jest podnoszona przez klawisze noncharacter; jednak klawisze nietypowe podnoszą zdarzenia KeyDown i KeyUp.

+4

W tym przypadku dokumentacja jest nieprawidłowa. Przetestowałem (char) 8 ze zdarzenia KeyPress i zdecydowanie go podniosłem. –

+0

+1 Jestem w pełni usatysfakcjonowany z Ed S., dlaczego używam "castingu typu", gdy mamy zdarzenia 'key up' i' key down'. W normalnych przypadkach powinniśmy unikać "odlewania typu". powinniśmy używać "odlewania typu", gdy nie mamy żadnych innych alternatyw. –

17

Używam dwóch następujących segmentów dużo:

To jeden za ograniczające pole tekstowe tylko do liczby całkowitej, ale pozwalając klawiszy sterujących:

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

To jeden dla restricing pole tekstowe do deblu, pozwalając jeden "." tylko i umożliwiając klawisze kontrolne:

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

Klawisz Backspace nie jest podnoszony przez zdarzenie KeyPress. Więc trzeba go złapać w keyDown lub keyUp wydarzeń i ustawić właściwość SuppressKeyPress jest prawdą, aby zapobiec Backspace zmienić tekst w polu tekstowym:

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

+1 za używanie Keys.Back –

+1

Backspace wywołuje zdarzenie keypressa – 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

Podczas gdy ten przykładowy kod może odpowiedzieć na pytanie, lepiej byłoby podać pewne istotne wyjaśnienie odpowiedzi. W obecnej wersji ta odpowiedź nie dodaje żadnej wartości dla przyszłych czytelników. –

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

Trzeba dodać (char.IsControl (e.KeyChar)) w twoim zdaniem i to wszystko.

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; 
      } 
     } 
Powiązane problemy