2009-07-28 34 views

Trả lời

29

Tôi thích sử dụng !Char.IsControl (e.KeyChar) để tất cả các ký tự "kiểm soát" như phím xóa lùi và phím tắt clipboard được miễn.

Nếu bạn chỉ muốn kiểm tra cho backspace, bạn có thể lẽ nhận được ngay với:

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

Chỉ cần thử nghiệm - so sánh với (char) 8 thực sự hiệu quả. –

+11

Có thể tốt hơn để sử dụng ''\ b'' trên' (char) 8'. –

+5

@AlexHumphrey Tôi nghĩ rằng tốt hơn là '(char) Keys.Back' – Antonio

1

Từ các tài liệu:

Sự kiện KeyPress không được đưa lên bởi các phím noncharacter; tuy nhiên, các phím noncharacter làm tăng các sự kiện KeyDown và KeyUp.

+4

Trong trường hợp đó tài liệu là sai. Tôi đã thử nghiệm (char) 8 từ sự kiện KeyPress và nó chắc chắn được nâng lên. –

+0

+1 Tôi hoàn toàn hài lòng với Ed S. tại sao sử dụng 'type casting' khi chúng ta có các sự kiện' key up' và 'key down'. Trong trường hợp bình thường, chúng ta nên tránh 'loại casting'. chúng ta nên sử dụng 'type casting' khi chúng ta không có bất kỳ lựa chọn thay thế nào khác. –

17

tôi sử dụng hai đoạn sau rất nhiều:

Cái này để hạn chế một textbox để nguyên mà thôi, nhưng cho phép các phím điều khiển:

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

này một cho restricing một textbox để đôi, cho phép một '.' chỉ và cho phép các phím điều khiển:

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

Phím xóa không được tăng lên bởi sự kiện KeyPress. Vì vậy, bạn cần phải nắm bắt nó trong KeyDown hoặc KeyUp sự kiện và thiết lập thuộc tính SuppressKeyPress là đúng để ngăn chặn sự thay đổi phím lùi chìa khóa văn bản của bạn vào ô:

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

+1 để sử dụng Keys.Back –

+1

Backspace tăng sự kiện nhấn phím – 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

Khi mẫu mã này có thể trả lời được câu hỏi, bạn nên đưa ra một số giải thích cần thiết cho câu trả lời của mình. Vì nó đứng ngay bây giờ câu trả lời này thêm ít hoặc không có giá trị cho độc giả trong tương lai. –

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

Bạn phải thêm (char.IsControl (e.KeyChar)) trong câu bạn và đó là nó.

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; 
      } 
     } 
Các vấn đề liên quan