c#中的控件文本框,仅允许8个数字和最后一个字母

c#中的控件文本框,仅允许8个数字和最后一个字母,c#,winforms,C#,Winforms,我正试图在c#中制作一个文本框,它只能容纳8个第一个数字和最后一个字母,就像西班牙的DNI一样。这是我的密码: private void textBox5_KeyPress(object sender, KeyPressEventArgs e) { int contador = 0; do { e.Handled = !(char.IsNumber(e.KeyChar) |

我正试图在c#中制作一个文本框,它只能容纳8个第一个数字和最后一个字母,就像西班牙的DNI一样。这是我的密码:

private void textBox5_KeyPress(object sender, KeyPressEventArgs e) 
        {
            int contador = 0;

            do
            {
                e.Handled = !(char.IsNumber(e.KeyChar) || e.KeyChar == (char)Keys.Back); //8 numeros

                contador++;

            } while (contador < 8);

            if (contador == 8) // Si se han escrito 8 numeros hago que se escriba la ultima letra
            {
                e.Handled = false;

                textBox5.MaxLength = 9;

                if(char.IsLetter(e.KeyChar))
                {
                    e.Handled = true;
                }           
            }
        }
private void textBox5\u按键(对象发送器,按键事件参数e)
{
int contador=0;
做
{
e、 Handled=!(char.IsNumber(e.KeyChar)| | e.KeyChar==(char)Keys.Back);//8个数字
contador++;
}而(contador<8);
如果(contador==8)//s se han escrito 8 numerios hago que se escriba la ultima letra
{
e、 已处理=错误;
textBox5.MaxLength=9;
if(字符Isleter(e.KeyChar))
{
e、 已处理=正确;
}           
}
}

与标准的
文本框相比,有更好的控制来实现您的目标。看看标准
winforms
控件提供的
MaskedTextBox
。您只需设置
Mask
属性。在您的情况下,它将是:

maskedTextBox1.Mask = "00000000L";
0-数字,必填项。此元素将接受0和9之间的任何一位数字。

L-字母,必填。将输入限制为ASCII字母a-z和a-z。此掩码元素相当于正则表达式中的[a-zA-z]。


有关更多信息,请查看链接。

那么问题是什么?