我目前正在制作一个基本的计算器表格,到目前为止,我已经使用正则表达式方法来限制任何不是运算符(+, - ,*等)或数字的字符。
我也实现了它,所以如果他们输入一个非法字符,会弹出错误信息,并删除输入的文本框中的最后一个字符。
Regex LegalChars = new Regex(@"[^0-9 + - * / % .]");
MatchCollection Matches = LegalChars.Matches(UserInput.Text);
if (Matches.Count > 0) {
MessageBox.Show("You can only enter what is shown on the calculator\nI.e. No letters or different symbols");
UserInput.Text = DeleteLastChar(UserInput.Text); //couldn't get .TrimEnd to work so i made my own function
}
但是我注意到如果你粘贴类似“5 * a + 6-12”的东西,它会删除每一个字符,直到它删除a(即它现在为“5 *”),如果你输入一个非法字符文本框中间的字符表示同样的事情。
解决这个问题的方法是什么?即一种删除所有非法字符但只删除非法字符的方法。或者更好的是Windows计算器的实现方式 - 你根本不能输入非法字符
答案 0 :(得分:0)
在基本计算器中检查非法字符的正则表达式为@"[^0-9+/*()-]"
。它将匹配除数字+
,/
,*
,(
,)
,-
以外的任何字符。您可以添加更多内容,例如:%
和.
。
然后,您可以检查OnTextChanged事件或OnKeyPress。我自己更喜欢OnKeyPress,因为它允许在文本发生变化之前拦截键盘输入。
以下是假设您的TextBox
对象被称为textBox1
的示例代码:
using System.Windows.Forms;
using System.Text.RegularExpressions;
...
textBox1.KeyPress += new KeyPressEventHandler(textBox1_KeyPress);
private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
if (Regex.IsMatch(e.KeyChar.ToString(), @"[^0-9+/*()%.-]"))
{
e.Handled = true; // Do not allow input
}
}