拥有MaskedTextBox只接受字母

2 c# maskedtextbox winforms

这是我的代码:

private void Form1_Load(object sender, EventArgs e)
{
    maskedTextBox1.Mask = "*[L]";
    maskedTextBox1.MaskInputRejected += new MaskInputRejectedEventHandler(maskedTextBox1_MaskInputRejected);
}
Run Code Online (Sandbox Code Playgroud)

如何将其设置为仅接受字母,但用户需要多少?谢谢!

Iai*_*ard 6

如果蒙版文本框接受正则表达式,这将很容易,但遗憾的是它们没有.

你可以做的一种方法(尽管不是很漂亮)是使用可选的字母?掩码,并在文本框中输入与允许的最大长度相同的数量,即

maskedTextBox1.Mask = "????????????????????????????????.......";
Run Code Online (Sandbox Code Playgroud)

或者,您可以使用自己的验证而不是掩码,并使用正则表达式

void textbox1_Validating(object sender, CancelEventArgs e)
{
    if (!System.Text.RegularExpressions.Regex.IsMatch(textbox1.Text, @"^[a-zA-Z]+$"))
    {
        MessageBox.Show("Please enter letters only");
    }
}
Run Code Online (Sandbox Code Playgroud)

或者另一种方法是通过处理KeyPress事件来忽略除字母以外的任何按键,这在我看来是最好的方法.

private void textbox1_KeyPress(object sender, KeyPressEventArgs e)
{
     if (!System.Text.RegularExpressions.Regex.IsMatch(e.KeyChar.ToString(), @"^[a-zA-Z]+$"))
          e.Handled = true;
}
Run Code Online (Sandbox Code Playgroud)

  • `if(!System.Text.RegularExpressions.Regex.IsMatch(textbox1.Text,@"^ [a-zA-Z] + $"))`不会在KeyPress事件中工作.使用`e.KeyChar.ToString()`而不是`textbox1.Text` (2认同)