none
Как запретить ввод слов в textbox? RRS feed

  • Вопрос

  • На поле textbox1, можно вводит слова и цифры, мне нужно чтобы можно было вводить только цифры.

    Бог движок на котором мы написаны, а Библия компилятор, и верующие постоянно компилируют себя в нём.

Ответы

  • Я всё таки настоятельно рекомендую использовать в WinForms компонент NumericUpDown, если нужно вводить только числа.

    В этом стандартном компоненте будет работать и клавиша Backspace, и вырезание/копирование/вставка. Эти возможности привычны пользователям и востребованы.

    В предложенной кусочке кода таких возможностей не предусмотрено. Конечно, это можно реализовать, но зачем, если уже есть готовый компонент?

    К тому же, в предложенном коде всё равно можно вставить текст в TextBox - мышкой через контекстное меню.

    • Помечено в качестве ответа Abolmasov Dmitry 31 мая 2012 г. 14:09
  • Я тоже пишу на VB, поэтому могу только подсказать что здесь можно перевести VB из той статья на C#

    Там если вы внимательно прочли делается целая комбинация действий - ввод разрешен так, что бы получилось положительное цело или дробное число с ограничением до сотой доли. Если вам не нужна такая кодировка то за старт можете взять более простой код и доращивать его до ваших нужд

        Private Sub TextBox1_KeyPress(sender As System.Object, e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox1.KeyPress
            Dim c As Char = e.KeyChar
            If Not Char.IsNumber(c) Then
                e.Handled = True
            End If
        End Sub
    он разрешит вводить только цифры, но при это можно будет ввести например 00000


    Женат на WPF. Тайно встречаюсь с WinRT. Не сложилось с C#!

    • Помечено в качестве ответа Doctor Gordon 27 мая 2012 г. 14:32
    Отвечающий

Все ответы

  • Вопрос неоднократно подымался на форуме и в частности вот здесь.

    В целом решение сводится к тому, что вам нужно перехватить событие ввода и проверять введен ли допустимый символ и если нет "проглатывать" событие. Для более конкретного ответа нужно знать на какой платформе пишите (WPF или WinForms).


    Женат на WPF. Тайно встречаюсь с WinRT. Не сложилось с C#!

    • Помечено в качестве ответа Doctor Gordon 27 мая 2012 г. 10:25
    • Снята пометка об ответе Doctor Gordon 27 мая 2012 г. 10:26
    Отвечающий
  • Для более конкретного ответа нужно знать на какой платформе пишите (WPF или WinForms).

    WinForms. По ссылке, которую вы дали я не совсем понял, можете дать готовый код или ссылку на msdn?


    Бог движок на котором мы написаны, а Библия компилятор, и верующие постоянно компилируют себя в нём.



  • Я тоже пишу на VB, поэтому могу только подсказать что здесь можно перевести VB из той статья на C#

    Там если вы внимательно прочли делается целая комбинация действий - ввод разрешен так, что бы получилось положительное цело или дробное число с ограничением до сотой доли. Если вам не нужна такая кодировка то за старт можете взять более простой код и доращивать его до ваших нужд

        Private Sub TextBox1_KeyPress(sender As System.Object, e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox1.KeyPress
            Dim c As Char = e.KeyChar
            If Not Char.IsNumber(c) Then
                e.Handled = True
            End If
        End Sub
    он разрешит вводить только цифры, но при это можно будет ввести например 00000


    Женат на WPF. Тайно встречаюсь с WinRT. Не сложилось с C#!

    • Помечено в качестве ответа Doctor Gordon 27 мая 2012 г. 14:32
    Отвечающий
  • В WinForms используйте NumericUpDown вместо TextBox'а.
  • Я всё таки настоятельно рекомендую использовать в WinForms компонент NumericUpDown, если нужно вводить только числа.

    В этом стандартном компоненте будет работать и клавиша Backspace, и вырезание/копирование/вставка. Эти возможности привычны пользователям и востребованы.

    В предложенной кусочке кода таких возможностей не предусмотрено. Конечно, это можно реализовать, но зачем, если уже есть готовый компонент?

    К тому же, в предложенном коде всё равно можно вставить текст в TextBox - мышкой через контекстное меню.

    • Помечено в качестве ответа Abolmasov Dmitry 31 мая 2012 г. 14:09
  • Я всё таки настоятельно рекомендую использовать в WinForms компонент NumericUpDown, если нужно вводить только числа.

    В этом стандартном компоненте будет работать и клавиша Backspace, и вырезание/копирование/вставка. Эти возможности привычны пользователям и востребованы.

    В предложенной кусочке кода таких возможностей не предусмотрено. Конечно, это можно реализовать, но зачем, если уже есть готовый компонент?

    К тому же, в предложенном коде всё равно можно вставить текст в TextBox - мышкой через контекстное меню.

    Выше я давал ссылку, где решена проблема и с вставкой из буфера. Думаю автору вопроса нужен именно подход с блокировкой отдельного ввода в textbox (есть масса причин и случаев).

    Женат на WPF. Тайно встречаюсь с WinRT. Не сложилось с C#!

    Отвечающий
  • Следующий код не работает:

            private void textBox2_KeyPress(object sender, KeyPressEventArgs e)
            {
                if (e.KeyChar == (char)Keys.Delete) MessageBox.Show("a");
            }

    Я нажимаю на кнопку Delete, но сообщения нет.

    А следующий код работает:

            private void textBox2_KeyPress(object sender, KeyPressEventArgs e)
            {
                if (!(e.KeyChar == (char)Keys.Delete)) MessageBox.Show("a");
            }

    Я нажимаю на любую кнопку кроме Delete, и сообщение показывается, а когда на кнопку Delete то сообщения нет.

    Мне нужно чтоб было наоборот, как сделать?


    Бог движок на котором мы написаны, а Библия компилятор, и верующие постоянно компилируют себя в нём.


  • KeyChar это только для символов. Системные клавиши им не обрабатываются. Что бы обрабатывать системные клавиши нужно смотреть e.KeyCode в событии KeyUp или KeyDown

    Женат на WPF. Тайно встречаюсь с WinRT. Не сложилось с C#!

    Отвечающий