Наличие MaskedTextBox принимает только письма - PullRequest
2 голосов
/ 26 ноября 2010

Вот мой код:

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

Как настроить его так, чтобы он принимал только буквы, но столько, сколько хочет пользователь?Спасибо!

Ответы [ 2 ]

6 голосов
/ 26 ноября 2010

Это было бы легко, если бы замаскированные текстовые поля принимали регулярное выражение, но, к сожалению, это не так.

Один (хотя и не очень красивый) способ сделать это - использовать дополнительную маску ? для буквы и указать ту же величину, что и максимальная длина, допустимая в текстовом поле, т.е.

maskedTextBox1.Mask = "????????????????????????????????.......";

В качестве альтернативы вы можете использовать свою собственную проверку вместо маски и использовать регулярное выражение, например

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

Или еще одним способом было бы игнорировать любые нажатия клавиш, отличные от нажатий букв, обрабатывая событие KeyPress , что, на мой взгляд, было бы наилучшим способом.

private void textbox1_KeyPress(object sender, KeyPressEventArgs e)
{
     if (!System.Text.RegularExpressions.Regex.IsMatch(e.KeyChar.ToString(), @"^[a-zA-Z]+$"))
          e.Handled = true;
}
2 голосов
/ 26 ноября 2010

Если вы хотите, чтобы вводились только буквы, вы можете использовать это в событии keyPress.

...