Справочник по C#

    Исходники по языку программирования CSharp

    Ввод в Textbox только цифр: Справочник по C#

    /
    /
    /
    1026 Views


          В данной инструкции рассмотрим ввод только чисел от пользователя. В Microsoft Visual Studio присутствует элемент управления «MaskedTextBox», с его настраиваемой маской ввода, но будем считать, что сегодня нас интересует только «TextBox».
          Для реализации данной задачи воспользуемся событием «KeyPress», происходящее при нажатии клавиши, если элемент управления имеет фокус. Создайте проект Windows Form в Microsoft Visual Studio и добавьте на главную форму элемент управления «TextBox». Выберете данный компонент и сделайте клик правой клавишей мыши по нему, выберете из появившегося контекстного меню, пункт «Свойства». В открывшемся окне перейдите в события компонента (значок молнии в верхней части окна) и найдите событие «KeyPress», сделайте двойной клик по данному событию. После выполнения всех действий, вы перейдите в автоматически созданный метод «textBox1_KeyPress», события «KeyPress».

          С каждым событием «KeyPress» передается объект «KeyPressEventArgs». Данный объект включает свойство «KeyChar», предоставляющее символ нажатой клавиши. Например, при нажатии клавиш SHIFT + D данное свойство возвращает прописной знак D и его код 68. Так же присутствует свойство «Handled», которое используется для определения того, было ли событие обработано. Установив значение «Handled» в «true», событие ввода не будет передано операционной системе для обработки по умолчанию.
          Рассмотрим несколько примеров создания ограничения вводимых данных в текстовое поле.
    Пример 1:
    Добавьте приведенный ниже листинг в метод «textBox1_KeyPress».

    if ((e.KeyChar <= 47 || e.KeyChar >= 58) && e.KeyChar != 8)
    e.Handled = true;
    

          Данный пример включает в себя составные условия, используя логические операторы такие как &&(и), || (или), ! (not) и выполняет проверку десятичного кода введенного символа, по двум условиям:

    • «e.KeyChar != 8» – Если была нажата клавиша «Backspace», то разрешить удаление символа.
    • «(e.KeyChar <= 47 || e.KeyChar >= 58)» – Если введенный символ имеет ASCII код меньше или равен 47 и больше или равен 58, то ввод запрещен.

          Ниже представлена таблица кодов ASCII символов, в которой красным цветом выделены символы, ввод которых запрещен и зеленым цветом, ввод которых разрешен.

    Пример 2:
    Добавьте приведенный ниже листинг в метод «textBox1_KeyPress».

    if (!Char.IsDigit(e.KeyChar) && e.KeyChar != Convert.ToChar(8))
    {
    e.Handled = true;
    }

          В данном примере так же используются логически операторы, такие как &&(и), ! (not) и выполняется проверка десятичного кода введенного символа, по двум условиям. Для проверки используется метод «Char.IsDigit», который возвращает «true», если введенный символ Юникода является десятичной цифрой и «false», если нет. Так же присутствует проверка на нажатие клавиши «Backspace».

          Подробную информацию о данном методе вы можете получить с сайта Microsoft MSDN по адресу http://msdn.microsoft.com.

    Пример 3:
    Добавьте приведенный ниже листинг в метод «textBox1_KeyPress».

    if (!(Char.IsDigit(e.KeyChar)) && !((e.KeyChar == '.') &&
    (((TextBox)sender).Text.IndexOf(".") == -1) &&
    (((TextBox)sender).Text.Length != 0)))
    {
    if (e.KeyChar != (char)Keys.Back)
    {
    e.Handled = true;
    }
    }

          В данном примере так и в предыдущем реализована проверка кода вводимого символа с использованием метода «Char.IsDigit», но присутствует дополнительное условие, разрешающее ввод одного десятичного разделителя. Для этого используется метод «Text.IndexOf». Данный метод выполняет поиск знака точки, по словам используя текущий язык и региональные параметры. Поиск начинается с первой позиции знака в данном экземпляре (текущей строке) и продолжается до последней позиции знака. Если данный символ не был найден, то метод возвращает значение «-1». В случае если символ был найден то метод возвращает целое десятичное число, указывающее в какой позиции находится данный символ и запрещает обработку ввода символа.

          Десятичный разделитель — знак, используемый для разделения целой и дробной частей вещественного числа в форме десятичной дроби в системе десятичного исчисления. Для дробей в иных системах счисления может использоваться термин разделитель целой и дробной частей числа. Иногда также могут употребляться термины десятичная точка и десятичная запятая. (http://ru.wikipedia.org).
          Дополнительную информацию по методу «Text.IndexOf» вы можете получить по адресу: http://msdn.microsoft.com.

    Пример 4:
    Добавьте приведенный ниже листинг в метод «textBox1_KeyPress».

    if (!System.Text.RegularExpressions.Regex.Match(e.KeyChar.ToString(), @"[0-9]").Success)
    {
    e.Handled = true;
    }

          Для проверки вводимых символов, в данном примере используется метод «Regex.Matches». Данный метод ищет во входящей строке все вхождения заданного регулярного выражения. Регулярное выражение представляет собой состоящий из символов шаблон, обозначающий последовательность символов произвольной длины. Вы можете указать любое регулярное выражение, например, разрешить ввод только символов «[a-zA-Z]» или разрешить ввод десятичного разделителя «,|.|[0-9]».

          Дополнительную информацию по методу «Regex.Matches» вы можете получить по адресу: http://msdn.microsoft.com.

    Пример 5:
    Добавьте приведенный ниже листинг в метод «textBox1_KeyPress».

    if (!System.Text.RegularExpressions.Regex.IsMatch(e.KeyChar.ToString(),@"d+"))
    e.Handled = true;

          Данный пример так же использует заданное регулярное выражение для реализации проверки введенного символа. В регулярном выражении используется оператор «+», который означает, что требуется найти один или несколько символов одного и того же типа. Например, d+ соответствует числам “1”, “11”, “1234”, и т.д. Если вы не уверены, что за числом будут следовать какие-нибудь цифры? Вы можете указать, что допускается как любое число цифр, так и отсутствие цифр. Для этого служит символ «*».
    Пример 6:
          Для реализации данного примера вам необходимо воспользоваться событием «KeyDown», элемента управления «textBox1». Перейдите в конструктор главной формы и выберете компонент «textBox1». Сделайте клик правой клавишей мыши по данному элементу управления, выберете из появившегося контекстного меню, пункт «Свойства». В открывшемся окне перейдите в события компонента (значок молнии в верхней части окна) и найдите событие «KeyDown», сделайте двойной клик по данному событию. После выполнения всех действий, вы перейдите в автоматически созданный метод «textBox1_KeyDown», события «KeyDown». Данное событие происходит при каждом нажатии клавиши, если элемент управления имеет фокус.

    Добавьте приведенный ниже листинг в метод «textBox1_KeyDown».

    e.SuppressKeyPress = true;
    // Пропускаем цифровые кнопки
    if ((e.KeyCode >= Keys.D0) && (e.KeyCode = Keys.NumPad0) && (e.KeyCode <= Keys.NumPad9)) e.SuppressKeyPress = false;
    // Пропускаем Delete, Back, Left и Right
    if ((e.KeyCode == Keys.Delete) || (e.KeyCode == Keys.Back) ||
    (e.KeyCode == Keys.Left) || (e.KeyCode == Keys.Right)) e.SuppressKeyPress = false;

          Данный пример использует свойство «KeyEventArgs.SuppressKeyPress», которое получает или задает значение, указывающее, следует ли передавать события нажатия клавиши базовому элементу управления. При установке в данном свойстве значения «true», означает, что события «KeyDown» или «KeyUp» не должны обрабатываться в элементе управления «textBox1», для разрешения необходимо установить значение — «false».

          Дополнительную информацию по свойству «KeyEventArgs.SuppressKeyPress», вы можете получить по адресу http://msdn.microsoft.com.

    Ссылка для скачивания примера: Яндекс.Диск

    Ввод в Textbox только цифр: Справочник по C#

    0.00 (0%) 0 votes

    moyadcode13
    • Facebook
    • Twitter
    • Google+
    • Linkedin
    • Pinterest
    moyadcode10
    moyadcode11
    moyadcode9