2011-11-30 64 views

Trả lời

14

Bạn có thể sử dụng đoạn mã sau:

private void textBox1_TextChanged(object sender, EventArgs e) 
{ 
    if (!System.Text.RegularExpressions.Regex.IsMatch(textBox1.Text, "^[a-zA-Z ]")) 
    { 
     MessageBox.Show("This textbox accepts only alphabetical characters"); 
     textBox1.Text.Remove(textBox1.Text.Length - 1); 
    } 
} 
+1

Dường như không hoạt động tốt. Nếu tôi thêm một chữ cái và sau đó một số/khoảng trắng/bất cứ điều gì nó sẽ cho tôi đi khi tôi đáp ứng regex (bắt đầu bằng chữ cái). –

+0

@favoretti bây giờ mã hoạt động tốt, nhưng có một ngoại lệ xảy ra nếu tôi gõ số nguyên ký tự đầu tiên và khi tôi nhấn phím xóa lùi để loại bỏ điều đó. Mã hoạt động tốt cho số, nó bật thông báo khi tôi nhập số.nhưng khi tôi đã cố gắng để xóa với backspace nó mang lại cho tôi lỗi StartIndex không thể nhỏ hơn 0, tên tham số startIndex. Làm thế nào để xử lý này? – chathwind

15

Bạn có thể thử bằng cách xử lý sự kiện KeyPress cho textbox

void textBox1_KeyPress(object sender, KeyPressEventArgs e) 
{ 
    e.Handled = !(char.IsLetter(e.KeyChar) || e.KeyChar == (char)Keys.Back); 
} 

Ngoài ra nói cho phép xóa lùi trong trường hợp bạn muốn loại bỏ một số văn bản, điều này nên hoạt động hoàn toàn tốt cho bạn

EDIT

Đoạn mã trên sẽ không hoạt động để dán vào trường mà tôi tin rằng bạn sẽ phải sử dụng sự kiện TextChanged nhưng sau đó sẽ phức tạp hơn một chút khi bạn phải xóa char không chính xác hoặc tô sáng nó và đặt con trỏ để người dùng thực hiện chỉnh sửa Hoặc có thể bạn có thể xác thực khi người dùng đã nhập toàn bộ văn bản và các tab khỏi điều khiển.

+0

Công cụ này hoạt động rất tốt nhưng nó sẽ không cho phép tôi dán văn bản phải qua xác thực. –

4

Cách đơn giản nhất là để xử lý các TextChangedEvent và kiểm tra những gì đang được đánh máy:

string oldText = string.Empty; 
    private void textBox2_TextChanged(object sender, EventArgs e) 
    { 
     if (textBox2.Text.All(chr => char.IsLetter(chr))) 
     { 
      oldText = textBox2.Text; 
      textBox2.Text = oldText; 

      textBox2.BackColor = System.Drawing.Color.White; 
      textBox2.ForeColor = System.Drawing.Color.Black; 
     } 
     else 
     { 
      textBox2.Text = oldText; 
      textBox2.BackColor = System.Drawing.Color.Red; 
      textBox2.ForeColor = System.Drawing.Color.White; 
     } 
     textBox2.SelectionStart = textBox2.Text.Length; 
    } 

Đây là một phiên bản regex-miễn phí nếu bạn thích. Nó sẽ làm cho hộp văn bản nhấp nháy vào đầu vào kém. Xin lưu ý rằng nó cũng có vẻ hỗ trợ hoạt động dán.

+0

thưa bạn đó là tuyệt vời nhưng bạn có thể cho tôi biết trong deatail cách đánh máy được ngừng automaticallu nó chỉ là vòng lặp nếu kiểm tra nhưng làm thế nào gõ được dừng lại? và về biểu thức lambda? textBox1.Text.All (chr => char.IsLetter (chr)) cái này là gì. có nghĩa là cách thức hoạt động này vui lòng nếu bạn có thể –

+0

Hey! Vâng những gì nó làm nó để lưu trữ các văn bản trước đó từ đầu vào trong biến oldText. Sau đó, thay đổi tiếp theo của hộp văn bản nó sẽ kiểm tra ký tự theo ký tự và nếu ký tự không phải là một chữ cái - nó sẽ trả về văn bản cũ. Nếu đúng - nó sẽ đặt văn bản cũ giống với kiểu nhập văn bản hiện tại (mới). Vì vậy, nếu bạn có một đầu vào hợp lệ - oldText có được giá trị TextBox, nếu bạn có đầu ra không hợp lệ - nó hoạt động theo cách khác xung quanh. Ngoài ra một số phong cách GUi giúp hình dung nếu có một lỗi hay không. Hi vọng điêu nay co ich. –

+0

Vì vậy, textBox2.Text.All() lambda sẽ trả về false nếu ngay cả một ký tự không phải là một chữ cái. Nếu tất cả đều là chữ cái - nó sẽ trả về giá trị true. Từ đó về giải thích ở trên diễn ra. –

2
 if (System.Text.RegularExpressions.Regex.IsMatch(textBox1.Text, "^[a-zA-Z]+$")) 
     { 
     } 
     else 
     { 
      textBox1.Text = textBox1.Text.Remove(textBox1.Text.Length - 1); 
      MessageBox.Show("Enter only Alphabets"); 


     } 

Hãy Hãy thử điều này

3

viết mã trong Text_KeyPress tổ chức sự kiện như

private void textBox1_KeyPress(object sender, KeyPressEventArgs e) 
    { 

     if (!char.IsLetter(e.KeyChar)) 
     { 
      e.Handled = true; 
     } 
    } 
5
private void textbox1_KeyDown_1(object sender, KeyEventArgs e) 
{ 
    if (e.Key >= Key.A && e.Key <= Key.Z) 
    { 
    } 
    else 
    { 
     e.Handled = true; 
    } 
} 
1
private void textBox2_KeyPress(object sender, KeyPressEventArgs e) 
     { 
      if (e.KeyChar >= '0' && e.KeyChar <= '9') 
       e.Handled = true; 
      else 
       e.Handled = false; 
     } 
+0

Vui lòng bao gồm giải thích lý do tại sao câu trả lời của bạn sẽ hoạt động và cách kết nối hộp văn bản với sự kiện của bạn. – Vulcronos

2

Cái này đang làm việc hoàn toàn tốt ...

private void manufacturerOrSupplierTextBox_KeyPress(object sender, KeyPressEventArgs e) 
    { 
     if (char.IsControl(e.KeyChar) || char.IsLetter(e.KeyChar)) 
     { 
      return; 
     } 
     e.Handled = true; 
    } 
+0

Cảm ơn bạn đã kiểm tra IsControl. –

0
private void textBox1_KeyPress(object sender, KeyPressEventArgs e) 
    { 
     if (!char.IsControl(e.KeyChar) && !char.IsLetter(e.KeyChar) && 
     (e.KeyChar !='.')) 
     { 
      e.Handled = true; 
      MessageBox.Show("Only Alphabets"); 
     } 
    } 
+1

Giải thích tốt hơn cho giải pháp của bạn –

1

Hãy thử này

  private void tbCustomerName_KeyPress(object sender, KeyPressEventArgs e) 
    { 
     e.Handled = !(char.IsLetter(e.KeyChar) || e.KeyChar == (char)Keys.Back||e.KeyChar==(char)Keys.Space); 
    } 

Nó cho phép Spaces Trắng Quá

1

bạn có thể thử đoạn mã sau cảnh báo rằng tại thời điểm then chốt buổi họp báo

private void tbOwnerName_KeyPress(object sender, KeyPressEventArgs e) 
    { 

     //===================to accept only charactrs & space/backspace============================================= 

     if (e.Handled = !(char.IsLetter(e.KeyChar) || e.KeyChar == (char)Keys.Back || e.KeyChar == (char)Keys.Space)) 
     { 
      e.Handled = true; 
      base.OnKeyPress(e); 
      MessageBox.Show("enter characters only"); 
     } 
0

Đây là giải pháp của tôi và nó hoạt động theo kế hoạch:

string errmsg = "ERROR : Wrong input"; 
ErrorLbl.Text = errmsg; 

if (e.Handled = !(char.IsLetter(e.KeyChar) || e.KeyChar == (char)Keys.Back || e.KeyChar == (char)Keys.Space)) 
{ 
    ErrorLbl.Text = "ERROR : Wrong input"; 
} 
else ErrorLbl.Text = string.Empty; 
if (ErrorLbl.Text == errmsg) 
{ 
    Nametxt.Text = string.Empty; 
} 
0

Thử mã sau trong sự kiện KeyPress của hộp văn bản

if (char.IsLetter(e.KeyChar) == false & 
     Convert.ToString(e.KeyChar) != Microsoft.VisualBasic.Constants.vbBack) 
      e.Handled = true 
Các vấn đề liên quan