所以我有一个小计文本框,可以输入像 $546.75 这样的金额。现在,我想确保每 3 个位置(100,000,000)只允许使用数字、一位小数、一美元符号和逗号。这可能吗?也许不是逗号,但至少是数字、小数点和美元符号。
6 回答
为什么你不把货币符号“$”放在文本框的外面(在文本框的前面创建一个标签),那么你就不必担心这个字符,而只需关心数字。它看起来更好(在我看来)。然后你可以使用这个代码:
private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
if (e.KeyChar != (Char)Keys.Back) //allow backspace (to delete)
{
e.Handled = !char.IsNumber(e.KeyChar);
}
}
所有验证都应在 KeyPress 事件上手动执行。
这里描述了数值值的验证。您还需要检查“$”符号和小数点。
//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;
}
}
我认为您使用的是 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);
}
有很多关于数字文本框的文章
http://www.daniweb.com/software-development/csharp/threads/95153
http://www.codeproject.com/KB/vb/NumericTextBox.aspx
我在我的项目中使用这个
http://www.codeproject.com/KB/edit/ValidatingTextBoxControls.aspx
您是否尝试过 Ajax 控件?
http://www.aspsnippets.com/Articles/ASPNet-AJAX-FilteredTextBoxExtender-Control-Example.aspx
简单的。:)