限制文本框中允许的字符(输入金额)
题
因此,我有一个小计文本框,可以输入$ 546.75的金额。现在,我要确保只有每3个位置(100,000,000)的数字,一个小数,一个美元符号和逗号。这可能吗?也许不是逗号,而是至少数字,十进制和美元符号。
解决方案
我认为您正在使用Winforms而不是WPF。如果是这种情况,那么您可以使用system.windows.forms.erorprovider(您可以将一个从工具箱拖动到表单)以及正则表达式来进行验证。
警告:下面的Regex模式字符串可能无法完全做您想要的,但希望传达该想法。
一些匹配示例...“ $ 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);
}
其他提示
为什么您不将金钱标志“ $”放在文本框的侧面(创建一个标签仅在Infrontof Textbox上),那么您将不必担心此字符,而只需要担心数字。它看起来更好(在我看来)。然后,您可以使用此代码:
private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
if (e.KeyChar != (Char)Keys.Back) //allow backspace (to delete)
{
e.Handled = !char.IsNumber(e.KeyChar);
}
}
所有验证均应在按键事件上手动执行。
这里 描述了数字值的验证。您还需要检查“ $”标志和小数。
// 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;
}
}
不隶属于 StackOverflow