Как разрешить и ограничить одним "."(точка) символ в TextBox?(C # winforms) - PullRequest
0 голосов
/ 01 октября 2010

У меня есть этот код из MSDN, который допускает только числовые символы в TextBox. Но я не могу изменить его, чтобы принять "." в качестве входа и ограничить до одного.

Ex: 12.50     valid!
    236.3247  valid!  
    2..5      invalid
    //other non-numeric input invalid

Учитывая код ниже:

private bool nonNumberEntered = false;

private void textBox1_KeyDown(object sender, KeyEventArgs e)
{
    nonNumberEntered = false;

    if (e.KeyCode < Keys.D0 || e.KeyCode > Keys.D9)
    {
        if (e.KeyCode < Keys.NumPad0 || e.KeyCode > Keys.NumPad9)
        {
            if (e.KeyCode != Keys.Back)
            {
                nonNumberEntered = true;
            }
        }
    }
    if (Control.ModifierKeys == Keys.Shift)
    {
        nonNumberEntered = true;
    }
}

private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
    if (nonNumberEntered == true)
    {
        e.Handled = true;
    }
}

Просьба опубликовать ваш измененный код. Большое спасибо.

Ответы [ 2 ]

3 голосов
/ 01 октября 2010

Я бы просто проверил поле как число, чувствительное к культуре, после того, как оно было убрано с поля или при отправке формы. Это не действительно необходимо или ценно, чтобы фактически остановить их от нажатия. дважды в поле. Часто я нахожу такие вещи раздражающими, потому что я изменяю то, что было там, и я просто еще не закончил ...

Используйте double.TryParse для правильной проверки.

1 голос
/ 01 октября 2010

У меня есть текстовое поле, в котором я хочу только цифры и запятые, поэтому оно похоже на то, что у вас есть.

Я бы просто запустил регулярное выражение на textbox.Text, чтобы сопоставлять цифры и ноль или один десятичный знак при каждом нажатии клавиши. Если созданная строка не совпадает, просто запретите этот символ.

Я думаю, что примером .NET является "^ \ d *.? \ D * $"

Слева направо:

  • ^ в начале строки
  • \ d * ноль или более цифр
  • .? ноль или один период
  • \ d * ноль или более цифр
  • $ конец строки

Не совсем то, что у вас есть выше, но это сработает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...