C#表单 - 设置文本输入光标

时间:2015-04-12 05:24:06

标签: c# regex forms textbox

我目前正在制作一个基本的计算器表格,到目前为止,我已经使用正则表达式方法来限制任何不是运算符(+, - ,*等)或数字的字符。

我也实现了它,所以如果他们输入一个非法字符,会弹出错误信息,并删除输入的文本框中的最后一个字符。

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计算器的实现方式 - 你根本不能输入非法字符

1 个答案:

答案 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
    }
}