仅允许文本框中的特定字符

Ann*_*Bot 17 c# textbox winforms

我怎样才能只允许Visual C#文本框中的某些字符?用户应该能够将以下字符输入到文本框中,其他所有内容都应该被阻止:0-9,+, - ,/,*,(,).

我用Google来查找这个问题,但我得到的唯一解决方案是只允许使用字母字符,只允许数字或禁止使用某些字符.我想要的不是禁止某些字符,除了我在代码中添加的字符外,我想默认禁止所有内容.

Pau*_*bra 27

正如评论中提到的(以及我输入的另一个答案),您需要注册一个事件处理程序来捕获文本框上的keydown或keypress事件.这是因为TextChanged仅在TextBox失去焦点时触发

以下正则表达式允许您匹配您想要允许的字符

Regex regex = new Regex(@"[0-9+\-\/\*\(\)]");
MatchCollection matches = regex.Matches(textValue);
Run Code Online (Sandbox Code Playgroud)

而这恰恰相反,捕获了不允许的字符

Regex regex = new Regex(@"[^0-9^+^\-^\/^\*^\(^\)]");
MatchCollection matches = regex.Matches(textValue);
Run Code Online (Sandbox Code Playgroud)

我不假设有一个匹配,因为有人可以将文本粘贴到文本框中.在这种情况下catch textchanged

textBox1.TextChanged += new TextChangedEventHandler(textBox1_TextChanged);
private void textBox1_TextChanged(object sender, EventArgs e)
{
    Regex regex = new Regex(@"[^0-9^+^\-^\/^\*^\(^\)]");
    MatchCollection matches = regex.Matches(textBox1.Text);
    if (matches.Count > 0) {
       //tell the user
    }
}
Run Code Online (Sandbox Code Playgroud)

并验证单键按下

textBox1.KeyPress += new KeyPressEventHandler(textBox1_KeyPress);
private void textBox1_KeyPress(object sender, System.Windows.Forms.KeyPressEventArgs e)
{
    // Check for a naughty character in the KeyDown event.
    if (System.Text.RegularExpressions.Regex.IsMatch(e.KeyChar.ToString(), @"[^0-9^+^\-^\/^\*^\(^\)]"))
    {
        // Stop the character from being entered into the control since it is illegal.
        e.Handled = true;
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 您可能希望使用代码8添加额外的密钥检查,否则退格将无法正常工作 (4认同)
  • 作为旁注,当文本失去焦点时,TextChanged不会被触发,而是在文本发生变化之后(例如,如果文本有效,我会使用它来为文本着色).现在太难了. (3认同)

Ice*_*ind 10

您需要KeyDown在文本框中订阅该事件.然后这样的事情:

private void textBox1_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e)
{
    if (!char.IsControl(e.KeyChar) 
       && !char.IsDigit(e.KeyChar) 
       && e.KeyChar != '.' && e.KeyChar != '+' && e.KeyChar != '-'
       && e.KeyChar != '(' && e.KeyChar != ')' && e.KeyChar != '*' 
       && e.KeyChar != '/')
    {
        e.Handled = true;
        return;
    }
    e.Handled=false;
    return;
}
Run Code Online (Sandbox Code Playgroud)

重要的是要知道,如果你将Handled属性更改为true,它将不会处理击键.将其设置为false将.

  • KeyDown KeyEventArgs 参数没有 KeyChar 属性。也许您指的是 KeyPressEventArgs 和 KeyPress 事件,它确实具有该属性吗? (2认同)