Маскировка текстового поля только для чисел, но не будет принимать BackSpace - PullRequest
3 голосов
/ 30 июня 2009

У меня есть текстовое поле, которое я хотел бы только для чисел. Но если я нажму не тот номер, я не смогу вернуться назад, чтобы исправить его. Как я могу позволить backspace работать. Спасибо

    private void amount_PaidTextBox_KeyPress(object sender, KeyPressEventArgs e)
    {
        if (Char.IsNumber(e.KeyChar) != true)
        {
            e.Handled = true;
        }
    }

Ответы [ 8 ]

3 голосов
/ 30 июня 2009

Правильный ответ:

private void amount_PaidTextBox_KeyPress(object sender, KeyPressEventArgs e)
{
    e.Handled = !сhar.IsNumber(e.KeyChar) && (e.KeyChar != '\b');
}
3 голосов
/ 30 июня 2009

Вы также можете добавить проверку, чтобы разрешить управляющие символы:

if (Char.IsControl(e.KeyChar) != true && Char.IsNumber(e.KeyChar) != true)
{
    e.Handled = true;
}

Обновление: в ответ на комментарий человека-б к коду, он / она предлагает следующий стиль (который я также лично написал бы):

if (!Char.IsControl(e.KeyChar) && !Char.IsNumber(e.KeyChar))
{
    e.Handled = true;
}
1 голос
/ 30 июня 2009

Вы также можете переопределить событие TextChanged:

private void textBox1_TextChanged(object sender, EventArgs e)
{
    string text = (sender as TextBox).Text;

    StringBuilder builder = new StringBuilder(String.Empty);

    foreach (char character in text)
    {
        if (Char.IsDigit(character))
        {
            builder.Append(character);
        }
    }

    (sender as TextBox).Text = builder.ToString();
}

Обратите внимание, что вам необходимо добавить код для установки позиции каретки.

0 голосов
/ 06 мая 2018

Вы можете использовать следующее для события нажатия клавиши:

      private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
    {
        if (!Char.IsDigit(e.KeyChar) & (e.KeyChar != 8)) e.Handled = true; 
    }
0 голосов
/ 07 сентября 2012
private void txt_KeyPress(object sender, KeyPressEventArgs e)
{
    if (Char.IsDigit(e.KeyChar) || e.KeyChar == '\b')
    {
        // Allow Digits and BackSpace char
    }        
    else
    {
        e.Handled = true;
    }
}

См. Также ссылку: Маскирование текстового поля для приема только десятичных знаков десятичных знаков / 12209854 # 12209854

0 голосов
/ 26 июля 2011

Я обнаружил, что следующее работает хорошо. В него включены дополнительные исключения для разрешения возврата, нажатия клавиш со стрелками и т. Д. Как разрешить ввод только HTML (0-9) в поле ввода HTML с помощью jQuery?

0 голосов
/ 30 июня 2009

Немного чище формат выше:

 private void amount_PaidTextBox_KeyPress(object sender, KeyPressEventArgs e)
 {
   e.Handled = !(Char.IsNumber(e.KeyChar) || (e.KeyChar==Keys.Back));
 }
0 голосов
/ 30 июня 2009
private void amount_PaidTextBox_KeyPress(object sender, KeyPressEventArgs e)
{
     if (!Char.IsNumber(e.KeyChar) && e.KeyCode != Keys.Back)
          e.Handled = True;
}
...