Как запретить ввод цифр в textbox c
Перейти к содержимому

Как запретить ввод цифр в textbox c

  • автор:

Замена и запрет символов в TextBox?

Есть текстбокс, в который я могу ввести только цифры и запятую. Т.к. запятая нужна в качестве разделителя — она может писаться только раз.
Соответственно, если вводится точка — ее надо заменить на запятую. Получился такой код:

private: System::Void aPredelText_KeyPress(System::Object^ sender, System::Windows::Forms::KeyPressEventArgs^ e) < if ((e->KeyChar >= '0')&&(e->KeyChar if (e->KeyChar == '.') < e->KeyChar = ','; > if (e->KeyChar == ',') < if (aPredelText->Text->IndexOf(',') != -1) < e->Handled = true; > return; > if (Char::IsControl(e->KeyChar)) < if (e->KeyChar == (char) Keys::Enter) otvetButton->Focus(); return; > e->Handled = true; >

Компиляция проходит без ошибок, но в итоге ничего не меняется, все так же можно вводить любые символы и точка не меняется. Как можно решить эту проблему?

  • Вопрос задан более трёх лет назад
  • 8104 просмотра

Комментировать

Решения вопроса 1

AlekseyNemiro

Алексей Немиро @AlekseyNemiro

full-stack developer

private: System::Void aPredelText_KeyPress(System::Object^ sender, System::Windows::Forms::KeyPressEventArgs^ e) < // точка или запятая if(e->KeyChar == '.' || e->KeyChar == ',') < // жесткая запятая e->KeyChar = ','; // может уже имеем один разделитель if (aPredelText->Text->IndexOf(',') != -1) < e->Handled = true; return; > > // не управляющая клавиша, не число и не разделитель if(!Char::IsControl(e->KeyChar) && !Char::IsDigit(e->KeyChar) && e->KeyChar != ',') < e->Handled = true; return; > >

Ответ написан более трёх лет назад

Нравится 1 3 комментария

Запрет ввода русских символов

Для того чтобы запретить ввод каких-либо символов сделайте фильтрацию ввода при обработке события PreviewTextInput .

Ниже приведён пример того как с помощью данного события можно разрешить ввод в textBox только для цифр.

private void TextBox_PreviewTextInput(object sender, TextCompositionEventArgs e)

Для того чтобы его доработать под Вашу задачу достаточно добавить проверку, является ли вводимый символ латинским. Пример такой проверки можно посмотреть в этом вопросе: «Определить, является ли символ в строке латинским».

Отслеживать
ответ дан 7 фев 2016 в 23:44
11.7k 9 9 золотых знаков 28 28 серебряных знаков 40 40 бронзовых знаков
через CTRL+V можно вставить что угодно, как это можно обойти не запрещая комбинации клавиш?
8 фев 2016 в 23:07

Возможно это не ререшение, но как способ, то при выполнении эвента textChanged , или того, что ты задашь, который вызывается при введении текста, то при вводе символа, берешь весь string , выбераешь последний символ и смотришь, есть ли он в диапазоне

if(ch ='а' || ch>='A' && ch<='Я') textBox.Text.Remove(textBox.Text.Lenght-1); 

Как-то так, только, возможно, я с методами ошибся, так что исправь.

Возможной проблемой этого может стать то, что при вводе кириллицы, она появиться в textBox , но после этого сразу же пропадет. В крайнем случае при коммите действия связаного с textBox , ты можешь создать StringBuilder , пройтись по символах, ну и если есть хоть один, то выдавать MessageBox с ошибкой.

Ввод в TextBox только цифр и английских символов

Как наиболее правильно запретить ввод в TextBox символов любой раскладки кроме английской и цифр. Желательно не сравнивая в цикле каждый символ строки с шаблоном.

private void validationTextBox_KeyDown(object sender, KeyEventArgs e) < TextBox a = (TextBox)sender; if (e.Key < Key.D0 || e.Key >Key.F) e.Handled = true; //code > 

Отслеживать
задан 12 апр 2017 в 15:36
329 2 2 серебряных знака 13 13 бронзовых знаков
А что не так с кодом, который вы привели?
12 апр 2017 в 15:45
(За исключением странно заданного и скорее всего неправильного диапазона)
12 апр 2017 в 15:46
@VladD Он работает, но допускает ввод символов на любой раскладке
12 апр 2017 в 15:54
Ага, понял. Сейчас гляну.
12 апр 2017 в 15:55
Да, а что вы хотите делать с Ctrl-V?
12 апр 2017 в 15:56

2 ответа 2

Сортировка: Сброс на вариант по умолчанию

У меня работает код, основанный на этом ответе:

void OnPreviewTextInput(object sender, TextCompositionEventArgs e) < e.Handled = !e.Text.All(IsGood); >private void OnPasting(object sender, DataObjectPastingEventArgs e) < var stringData = (string)e.DataObject.GetData(typeof(string)); if (stringData == null || !stringData.All(IsGood)) e.CancelCommand(); >bool IsGood(char c) < if (c >= '0' && c = 'a' && c = 'A' && c

Вставка работает, если в ней нет запрещённых символов.

Отслеживать
ответ дан 12 апр 2017 в 16:18
207k 28 28 золотых знаков 293 293 серебряных знака 526 526 бронзовых знаков

[DllImport("user32.dll", SetLastError = true)] private static extern int GetWindowThreadProcessId( [In] IntPtr hWnd, [Out, Optional] IntPtr lpdwProcessId ); [DllImport("user32.dll", SetLastError = true)] private static extern IntPtr GetForegroundWindow(); [DllImport("user32.dll", SetLastError = true)] private static extern ushort GetKeyboardLayout( [In] int idThread ); private int GetKeyboardLayout() < return GetKeyboardLayout(GetWindowThreadProcessId(GetForegroundWindow(), IntPtr.Zero)); >private void validationTextBox_KeyDown(object sender, KeyEventArgs e) < TextBox a = (TextBox)sender; if (e.Key >= Key.D0 && e.Key = Key.A && e.Key else e.Handled = true; > 

Отслеживать
ответ дан 12 апр 2017 в 16:09
329 2 2 серебряных знака 13 13 бронзовых знаков
1033? А если ввод на французской локали?
12 апр 2017 в 16:20
У французкой 1036 код, msdn.microsoft.com/ru-ru/library/hh825684.aspx
12 апр 2017 в 16:26
Ну это да, но ваш код не примет цифры ни на французской, ни на немецкой, ни на китайской локали.
12 апр 2017 в 16:27
@VladD Спасибо, исправил, теперь принимает
12 апр 2017 в 16:31
Окей, а букву a на французской локали принимает?
12 апр 2017 в 17:16

  • c#
  • .net
  • wpf
    Важное на Мете
Похожие

Подписаться на ленту

Лента вопроса

Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.

Дизайн сайта / логотип © 2023 Stack Exchange Inc; пользовательские материалы лицензированы в соответствии с CC BY-SA . rev 2023.12.7.2316

Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.

Программирование на C, C# и Java

Уроки программирования, алгоритмы, статьи, исходники, примеры программ и полезные советы

ОСТОРОЖНО МОШЕННИКИ! В последнее время в соиальных сетях учстились случаи педложения помощи в написании прогамм от лиц, прикрвающихся сайтом vscode.ru. Мы никогда не пишем первыми и не размещаем никакие материалы в псторонних группах ВК. Для связи с нами используйте исключительно эти контакт: vscoderu@yandex.ru, https://vk.com/vscode

Ввод в TextBox только цифр и необходимых символов C#

Здравствуйте, очень часто начинающие программисты задают вопрос, как вводить в TextBox только цифры или другие необходимые им символы, игнорируя все остальные. В этой статье мы рассмотрим несколько самых простых и полезных способ решения этой проблемы.

Для этого мы создадим тестовый проект для наглядного примера с одним лишь текстбоксом, у нас он вот такой:

Ввод в TextBox только цифр и необходимых символов C#

Перво-наперво нам необходимо найти событие, благодаря которому сможем отследить нажатие определенных клавиш. Таким событием является KeyPress. Оно будет происходить всегда, когда пользователь нажимает на любую кнопку на клавиатуре. Чтобы перейти к нему, надо для начала выделить TextBox, один раз щёлкнув на него левой кнопкой мыши.

Ввод в TextBox только цифр и необходимых символов C#

Затем следует найти в правой стороне рабочей области Visual Studio окно «Свойства» и перейти в нём на вкладку событий (значок в виде молнии):

Ввод в TextBox только цифр и необходимых символов C#

Примечание: если вы не нашли «Свойства», то просто кликните правой кнопкой мыши по текстбоксу и выберете в появившемся меню соответствующую вкладку.

Далее мы ищем событие KeyPress и дважды нажимаем на него левой кнопкой мыши. Нас перенесет к коду этого события. Далее мы рассмотрим несколько вариантов решения проблемы с вводом определенных символов в TextBox. Сначала будут идти варианты только с выводом цифр, а затем и другие (с Backspace, пробелом, запятой и проч.)

Использование в TextBox только цифр.

Способ первый — самый быстрый.

Внутри этой области кода мы запишем всего несколько строк:

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *