В моем приложении Windows Form я хочу реализовать функцию, в которой пользователь должен ввести серийный номер продукта, который при сопоставлении с любым продуктом в базе данных должен отображаться в сетке. Я хочу сделать это с помощью события textbox textChanged.
Я запутался, когда понял, что либо я должен предотвратить запуск события textChanged до того, как значение текстового поля совпадет с каким-либо значением в базе данных. Есть ли способ заставить текстовое поле ожидать определенного количества текста или числа (мои серийные номера будут фиксированной длины - например, 10001, 10002, 10003) перед запуском оставшегося кода для отображения продукта в сетке?
И совместить с textBox.MaxLenght
. Это также защитит от того, чтобы пользователи вставляли больше символов, чем вы ожидаете.
используйте check textBox1.Text.Length <5 внутри метода события textchanged
Это не лучший подход для запроса к db внутри textChanged, потому что он запрашивает каждый раз при изменении текста внутри текстового поля на db. Поэтому вы должны добавить кнопку и выполнить такую стратегию внутри функции onclick. Поэтому он сделал вызов db, когда кнопка находится щелкнул, и все было сделано над текстовым полем.
@ArslanAli Я вот и думаю об этом. Я хочу включить такую функцию, при которой событие textChange должно ждать, пока не будут введены минимальные и максимальные числа. Можно ли сделать это с помощью события textChanged?
Наличие критерия if (textBox1.TextLength < 5) return;
предотвращает запросы к базе данных при каждом изменении.
Пожалуйста :)
добро пожаловать
Вы можете использовать свойство TextLength
TextBox
, чтобы получить длину текста. Например:
private void textBox1_TextChanged(object sender, EventArgs e)
{
if (textBox1.TextLength < 5)
return;
//Send query to database
}
Примечание: Как также упомянул Джими в комментариях, рекомендуется установить MaxLength
из TextBox
, чтобы не вводить больше текста.
Я хочу, чтобы текстовое поле ожидало фиксированного количества ввода. После ввода этого минимального или максимального числа необходимо выполнить оставшийся код, чтобы отобразить продукт в сетке. Возможно ли в событии textChanged не с помощью кнопки?
Сообщение напрямую отвечает на ваш вопрос. Он проверяет, составляет ли длина текста менее 5 символов, он ничего не делает, в противном случае отправляет запрос в базу данных.
Рассмотрим использование [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 символов.
Вы можете проверить
textbox.TextLength
.