Разрешить только 1 символ в TextBox - PullRequest
0 голосов
/ 12 марта 2019

В настоящее время я работаю над пользовательским элементом управления, который позволяет пользователям вводить десятичный или временной формат (чч: мм).Поэтому мне бы хотелось, чтобы, если TextBox содержал точку (.), Пользователь больше не добавлял / не вводил двоеточие (:) и наоборот.

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

 private void txtTime_KeyPress(object sender, KeyPressEventArgs e)
    {
        if ((!char.IsControl(e.KeyChar) & !char.IsDigit(e.KeyChar) & !(Convert.ToString(e.KeyChar) == ".") & !(Convert.ToString(e.KeyChar) == ":")))
        {
            e.Handled = true;
        }
        else
        {
            //only allow one '.' & ':'
            if (e.KeyChar == '.' && (sender as TextBox).Text.IndexOf('.') > -1)
            {
                e.Handled = true;                    
            }
            else if (e.KeyChar == ':' && (sender as TextBox).Text.IndexOf(':') > -1)
            {
                e.Handled = true;
            }
        }
    }

Итак, мой вопрос, как мне это сделать?

Кто-нибудь может мне помочь?Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 12 марта 2019

Для операторов неудобно, если они что-то набрали и хотят это исправить, но не могут, потому что в них есть неправильная точка или точка с запятой.

Предположим, что оператор пытался набрать 14:38:21, но вместо этого набирает:

14.38

"О нет, это неправильно, я хотел 14.38: 21! Итак, давайте сначалапродолжайте печатать :21 и затем вернитесь, чтобы изменить точку на двоеточие! "

Представьте себе разочарование оператора, когда он не может набрать :21 и не понимает, почему

В формах Windows проверять введенный ввод только тогда, когда оператор выражает, что он закончил редактирование ввода.

Поэтому используйте TextBox.OnValidating.Когда он вызывается, вы можете либо принять, либо отклонить ввод и сообщить оператору, что не так.

protected override void OnValidating (CancelEventArgs e)
{
    e.Cancel = this.IsInputErrorDetected;
    if (e.Cancel)
    {
         this.DisplayInputProblem();
    }
}

Бонус: также работает с copy-paste.

0 голосов
/ 12 марта 2019

Я не уверен, хорошо ли я понимаю ваш вопрос.Возможно, вы ищете maskedTextBox, где вы можете указать маску пользовательского ввода.

maskedTextBox

У этого есть маска для короткого времени ЧЧ: ММ

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