2011-09-04 102 views
1

所以我有一個小計文本框,其中可以輸入金額如$ 546.75。現在,我想確保只有數字,一位小數,一美元符號和逗號只允許每三個地方(100,000,000)。這可能嗎?也許不是逗號,但至少是數字,小數和美元符號。限制在文本框中允許的字符(輸入金額)

+2

請不要在您的標題中添加諸如「 - WinForm C#」之類的東西。這就是我們在這裏使用標籤的原因。 –

+0

好吧,對不起,請記住 – cb1295

回答

1

我認爲你正在使用的WinForms和WPF沒有。如果是這種情況,那麼你可以使用System.Windows.Forms.ErrorProvider(你可以將一個從工具箱拖放到你的表單)和正則表達式一起進行驗證。

警告:下面的正則表達式模式字符串可能不是你想要的,但希望傳達這個想法。

一些比賽的例子...... 「$ 4,000.00」, 「 - $ 4000.00」, 「 - $ 400.00」

private void textBox1_Validating(object sender, CancelEventArgs e) 
    { 
     string error = null; 
     string pattern = @"^\$?\-?([1-9]{1}[0-9]{0,2}(\,\d{3})*(\.\d{0,2})?|[1-9]{1}\d{0,}(\.\d{0,2})?|0(\.\d{0,2})?|(\.\d{1,2}))$|^\-?\$?([1-9]{1}\d{0,2}(\,\d{3})*(\.\d{0,2})?|[1-9]{1}\d{0,}(\.\d{0,2})?|0(\.\d{0,2})?|(\.\d{1,2}))$|^\(\$?([1-9]{1}\d{0,2}(\,\d{3})*(\.\d{0,2})?|[1-9]{1}\d{0,}(\.\d{0,2})?|0(\.\d{0,2})?|(\.\d{1,2}))\)$"; 

     if (!Regex.IsMatch(textBox1.Text, pattern)) 
     { 
      error = "Please enter a US currency value."; 
      e.Cancel = true; 
     } 
     errorProvider1.SetError((Control)sender, error); 
    } 
+0

謝謝,我使用的WinForms,不知道你從哪裏得到WPF,謝謝一堆,我會試試這 – cb1295

+0

只是試了一下,它的作品完美,我喜歡它是如何顯示錯誤圖標!再次感謝! – cb1295

+0

我看到了winforms標籤,所以我儘量多地考慮,但只是確保原來的問題沒有明確聲明winforms。很高興聽到它適合你! – blins

2

所有驗證都應在KeyPress事件中手動執行。

Here描述了對數字值的驗證。您需要額外檢查'$'符號和小數點。

+2

儘管貨幣符號必須取自當前的UI文化,而不是假定爲「$」 – ChrisF

+0

對,感謝您的更新 – Samich

+0

我會牢記這一點,感謝都 – cb1295

4

爲什麼不把錢標記「$」放在文本框的外側(創建一個標籤只是infrontof文本框),那麼你將不必擔心這個字符,而只是關於數字。它看起來更好(在我看來)。 然後你可以使用此代碼:

private void textBox1_KeyPress(object sender, KeyPressEventArgs e) 
    { 
     if (e.KeyChar != (Char)Keys.Back) //allow backspace (to delete) 
     { 
      e.Handled = !char.IsNumber(e.KeyChar); 
     } 
    } 
+1

你仍然需要允許數千和十進制分隔符,這兩者都是文化敏感的。 – ChrisF

+0

謝謝一堆,我會嘗試這個,如果其他失敗 – cb1295

+0

你是認真的嗎?標籤的想法很好,但你爲什麼要保持改變?大聲笑 –

1

// TB - 是文本框的名稱

private void tb_PreviewTextInput(object sender, TextCompositionEventArgs e) 
    { 
     char[] inputChar = e.Text.ToCharArray(); 

     if (char.IsNumber(inputChar[0])) 
     { 
      e.Handled = false; 
     } 
     else 
     { 
      e.Handled = true; 
     } 

//另一方法。

 if (char.IsDigit(inputChar[0])) 
     { 
      e.Handled = false; 
     } 
     else 
     { 
      e.Handled = true; 
     } 
    } 
相關問題