繁体   English   中英

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

[英]C# Forms - Setting the text enter cursor

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

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

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 *”),如果在中间输入了非法字符textbox chars做同样的事情。

这个问题有解决方案吗? 即删除所有非法字符但仅删除非法字符的方法。 或者更好的是Windows计算器的确切实现方式-您根本无法输入非法字符

用于在基本计算器中检查非法字符的正则表达式为@"[^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
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM