2011-11-30 106 views

回答

14

您可以使用下面的代碼片段:

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

似乎不能很好地工作。如果我添加一個字母,然後添加一個數字/空格/不管它會讓我走,因爲我滿足正則表達式(以字母開頭)。 –

+0

@favoretti現在的代碼工作正常,但是如果我鍵入第一個字符的整數,並且當我按退格鍵刪除時,會發生異常。代碼適用於數字,它會在我鍵入數字時彈出消息。但是當我試圖用退格清除時,它給了我錯誤StartIndex不能小於零,參數名稱startIndex。如何處理這個? – chathwind

15

您可以通過處理KeyPress事件對TextBox

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

另外說允許退格鍵的情況下,要刪除一些文本嘗試,這應該完全適合你的工作

編輯

上述代碼不適用於粘貼在我認爲必須使用TextChanged事件的字段中,但是如果您必須刪除不正確的字符或突出顯示它並將光標置於光標處以供用戶進行更正或者,也許您可​​以在用戶輸入完整文本並關閉控件後進行驗證。

+0

這一個很好,但它不會允許我粘貼應該通過驗證的文本。 –

4

最簡單的方法是處理TextChangedEvent和檢查什麼被鍵入:

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

這是一個免費的正則表達式版本,如果你喜歡。它會使文本框在輸入錯誤時閃爍。 請注意,它似乎也支持粘貼操作。

+0

先生,這是偉大的,但你可以告訴我deatail如何停止鍵入automaticallu它只是如果循環檢查,但如何停止鍵入? 和約lambda表達式? textBox1.Text.All(chr => char.IsLetter(chr))這是什麼。意思是如何工作,如果你可以 –

+0

嘿!那麼它做了什麼,以便將輸入中的前一個文本存儲在oldText變量中。然後在文本框的後續更改中逐字符檢查,如果該字符不是字母,則返回舊文本。如果是 - 將舊文本設置爲與當前(新)文本框輸入相同。 所以如果你有一個有效的輸入 - oldText得到的TextBox值,如果你有無效的輸出 - 它的工作方式相反。還有一些GUI造型有助於可視化是否有錯誤。希望這可以幫助。 –

+0

因此,即使一個字符不是字母,textBox2.Text.All()lambda也會返回false。如果全部都是字母 - 它會返回true。從此開始進行上述解釋。 –

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"); 


     } 

請嘗試在Text_KeyPress事件這個

3

編寫代碼爲

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

請包括解釋爲什麼您的答案將工作以及如何將文本框連接到您的活動。 – Vulcronos

2

這一個是工作絕對沒問題......

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

感謝您的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

更好地解釋你的解決方案 –

1

嘗試這個

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

它允許白空間​​太

1

你可以在按鍵下壓事件

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

這裏的時間嘗試下面的代碼,警報我的解決方案,它的工作原理按計劃:

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

請在KeyPress事件的文本框中嘗試以下代碼

if (char.IsLetter(e.KeyChar) == false & 
     Convert.ToString(e.KeyChar) != Microsoft.VisualBasic.Constants.vbBack) 
      e.Handled = true 
相關問題