Как найти определенное количество цифр в событии texbox textChanged в C#?

В моем приложении Windows Form я хочу реализовать функцию, в которой пользователь должен ввести серийный номер продукта, который при сопоставлении с любым продуктом в базе данных должен отображаться в сетке. Я хочу сделать это с помощью события textbox textChanged.

Я запутался, когда понял, что либо я должен предотвратить запуск события textChanged до того, как значение текстового поля совпадет с каким-либо значением в базе данных. Есть ли способ заставить текстовое поле ожидать определенного количества текста или числа (мои серийные номера будут фиксированной длины - например, 10001, 10002, 10003) перед запуском оставшегося кода для отображения продукта в сетке?

Вы можете проверить textbox.TextLength.

Reza Aghaei 05.08.2018 22:42

И совместить с textBox.MaxLenght. Это также защитит от того, чтобы пользователи вставляли больше символов, чем вы ожидаете.

Jimi 05.08.2018 22:50

используйте check textBox1.Text.Length <5 внутри метода события textchanged

Arslan Ali 05.08.2018 22:54

Это не лучший подход для запроса к db внутри textChanged, потому что он запрашивает каждый раз при изменении текста внутри текстового поля на db. Поэтому вы должны добавить кнопку и выполнить такую ​​стратегию внутри функции onclick. Поэтому он сделал вызов db, когда кнопка находится щелкнул, и все было сделано над текстовым полем.

Arslan Ali 05.08.2018 23:03

@ArslanAli Я вот и думаю об этом. Я хочу включить такую ​​функцию, при которой событие textChange должно ждать, пока не будут введены минимальные и максимальные числа. Можно ли сделать это с помощью события textChanged?

Noor 05.08.2018 23:13

Наличие критерия if (textBox1.TextLength < 5) return; предотвращает запросы к базе данных при каждом изменении.

Reza Aghaei 05.08.2018 23:15

Пожалуйста :)

Reza Aghaei 05.08.2018 23:43

добро пожаловать

Arslan Ali 06.08.2018 01:12
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
8
199
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Вы можете использовать свойство TextLengthTextBox, чтобы получить длину текста. Например:

private void textBox1_TextChanged(object sender, EventArgs e)
{
    if (textBox1.TextLength < 5)
        return;

    //Send query to database
}

Примечание: Как также упомянул Джими в комментариях, рекомендуется установить MaxLength из TextBox, чтобы не вводить больше текста.

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

Noor 05.08.2018 23:17

Сообщение напрямую отвечает на ваш вопрос. Он проверяет, составляет ли длина текста менее 5 символов, он ничего не делает, в противном случае отправляет запрос в базу данных.

Reza Aghaei 05.08.2018 23:18

Рассмотрим использование [MaskedTextBox] [1]. MaskedTextBox похож на стандартный TextBox, за исключением того, что вы определяете формат вводимого текста. Это может быть что угодно, буквы, цифры, тире и т. д.

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

Используйте конструктор форм Windows, чтобы добавить MaskedTextBox, или добавьте его самостоятельно:

this.maskedTextBox1 = new System.Windows.Forms.MaskedTextBox();
this.maskedTextBox1.Location = ...
this.maskedTextBox1.Size = ...
// etc. Advise: let forms designer do this

// accept only input of five digits:
this.Mask = "00000";

Оператор видит указание длины запрошенного ввода. Оператор не может ввести не цифру. Событие, когда вводятся все пять цифр, но также и во время набора (TextChanged), поэтому при желании можно реализовать автозаполнение. Вы даже можете получить уведомление, если оператор нажмет одну недопустимую клавишу, чтобы вы могли сообщить оператору об ошибке.

Использование MaskedTextBox или NumericUpDown также является хорошим предложением, но суть вопроса заключается в выполнении запроса в TextChanged, когда в элементе управления 5 символов.

Reza Aghaei 06.08.2018 17:53

Другие вопросы по теме