Перейти к содержимому

Как сделать проверку textbox c

  • автор:

Валидация ввода данных TextBox WinForms

На примере стандартной задачи валидации ввода данных в проекте на WinForms рассмотрим ряд интересных технических приемов, в частности для работы с потоками, которые могут пригодиться и для других задач.

Итак, предлагаем пользователю заполнить 4-е текстовых поля, двух типов данных. Два поля строковые и два числовые.

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

Первое что нам тут надо сделать это не дать возможность писать ничего кроме цифр в те два поля, которые могут иметь только цифровые значения, для этого повесим события KeyPress на оба этих поля и реализуем события следующим образом:

number != 8 дает возможность стирать написанное используя BackSpace. А вы спросите, как же стрелки, кнопка Delete и т.д.? Да, согласен, надо переделать, и можно даже короче, и вообще на оба контрола достаточного одного обработчика:

Теперь можно использовать любые кнопки типа Up, Dwn, Del, Back, для которых Char.IsControl(ch) вернет true.

Далее хотим проверить, что все наши TextBox поля были не пустыми, для этого при нажатии кнопки Start вызовем метод ValidateData

Функция ValidateData вернет false если хоть один TextBox будет пустой и нам его надо захайлайтить. За это будет отвечать метод MarkInvalid. В итоге мы хотим поморгать цветом Barder, но в TextBox нет возможности менять цвет рамки, поэтому, для начала сделаем метод MarkInvalid по простому, зададим свойству BackColor пустого TextBox значение Color.Red

MarkInvalid вызовется, если ValidateData вернет false

Как говориться просто и сердито. Но мы то хотим не просто, мы хотим что бы красным стал бортик пустого TextBox и не просто поменял цвет, а еще бы и могал. К сожалению нет у TextBox свойства для цвета Border, что делать?

Идея такая, под каждый TextBox подложим контрол Panel, вернее надо положить все TextBox внутрь Panel, для каждого своей, но так что бы Panel была на пиксель шире и выше, то есть по чуть чуть вылезать со всех сторон. Её то мы и будем красить в красный цвет, что бы получить эффект закраски рамки.

Функции ValidateData и MarkInvalid придется переписать, так как наши TextBox-ы теперь напрямую не принадлежать форме, они вложены каждый в свою Panel:

Check Whether a TextBox is empty or not

You should use String.IsNullOrEmpty() to make sure it is neither empty nor null (somehow):

For practical purposes you might also consider using String.IsNullOrWhitespace() since a TextBox expecting whitespace as input probably negates any purpose, except in case of, say, letting the user pick a custom separator for stuff.

AnasSafi's user avatar

Fᴀʀʜᴀɴ Aɴᴀᴍ's user avatar

are your best options.

PiotrWolkowski's user avatar

If one is in XAML, one can check whether there is text in a TextBox by using IsEmpty off of Text property.

Как сделать проверку textbox c

You should use String.IsNullOrEmpty() to make sure it is neither empty nor null (somehow):

For practical purposes you might also consider using String.IsNullOrWhitespace() since a TextBox expecting whitespace as input probably negates any purpose, except in case of, say, letting the user pick a custom separator for stuff.

AnasSafi's user avatar

Fᴀʀʜᴀɴ Aɴᴀᴍ's user avatar

are your best options.

PiotrWolkowski's user avatar

If one is in XAML, one can check whether there is text in a TextBox by using IsEmpty off of Text property.

Валидация ввода данных TextBox WinForms

На примере стандартной задачи валидации ввода данных в проекте на WinForms рассмотрим ряд интересных технических приемов, в частности для работы с потоками, которые могут пригодиться и для других задач.

Итак, предлагаем пользователю заполнить 4-е текстовых поля, двух типов данных. Два поля строковые и два числовые.

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

Первое что нам тут надо сделать это не дать возможность писать ничего кроме цифр в те два поля, которые могут иметь только цифровые значения, для этого повесим события KeyPress на оба этих поля и реализуем события следующим образом:

number != 8 дает возможность стирать написанное используя BackSpace. А вы спросите, как же стрелки, кнопка Delete и т.д.? Да, согласен, надо переделать, и можно даже короче, и вообще на оба контрола достаточного одного обработчика:

Теперь можно использовать любые кнопки типа Up, Dwn, Del, Back, для которых Char.IsControl(ch) вернет true.

Далее хотим проверить, что все наши TextBox поля были не пустыми, для этого при нажатии кнопки Start вызовем метод ValidateData

Функция ValidateData вернет false если хоть один TextBox будет пустой и нам его надо захайлайтить. За это будет отвечать метод MarkInvalid. В итоге мы хотим поморгать цветом Barder, но в TextBox нет возможности менять цвет рамки, поэтому, для начала сделаем метод MarkInvalid по простому, зададим свойству BackColor пустого TextBox значение Color.Red

MarkInvalid вызовется, если ValidateData вернет false

Как говориться просто и сердито. Но мы то хотим не просто, мы хотим что бы красным стал бортик пустого TextBox и не просто поменял цвет, а еще бы и могал. К сожалению нет у TextBox свойства для цвета Border, что делать?

Идея такая, под каждый TextBox подложим контрол Panel, вернее надо положить все TextBox внутрь Panel, для каждого своей, но так что бы Panel была на пиксель шире и выше, то есть по чуть чуть вылезать со всех сторон. Её то мы и будем красить в красный цвет, что бы получить эффект закраски рамки.

Функции ValidateData и MarkInvalid придется переписать, так как наши TextBox-ы теперь напрямую не принадлежать форме, они вложены каждый в свою Panel:

Input validation for text boxes in a Form

In a Win Form I’m doing initial validation in the Form. So before saving data, I want to validate whether all the required fields are filled (Text Boxes) by the user. There are about 18 such Text Boxes in the Form. Currently I’m doing it as follows. To make the code short only three fields are shown in the code.

Another option would be to use the logic inside the cmbSave_Click straightaway as follows,

Basically the code should be readable, consistent and should perform the validation properly.

Which option could be considered better? If both are not good please propose a way to do this?

6 Answers 6

Another option would be to handle the Validating event:

Adding the handler to the textboxes is easily done with a foreach loop in the form constructor:

Now the user can’t leave a textbox empty. The handler returns the focus back to the textbox. To exclude a textbox from being validated simply set the CausesValidation property to false.

As @Malachi pointed out, the nesting is easily avoidable here. However it’s still mixed abstraction levels — «Save» is more abstract than «is any of the txtApplicationNumber.Text, txtEmployeeID.Text and txtNIC.Text values null or empty?».

Being consistent about abstraction levels makes the code much easier to read:

Where ValidateForm() is at a lower abstraction level and needs to know about the existence of textboxes on the form:

Just a note about this snippet:

& makes a bitwise AND, which I really doubt you intend to be doing here. As @Malachi pointed out, use && to perform logical AND.

Проверить TextBox на пустоту

Как проверить textBox.Text на пустоту?
private void button1_Click(object sender, EventArgs e) < if.

Проверить 300 TextBox на пустоту как можно оптимальнее
На форме имются 300 текст боксов подскажите как можно коротко записать, что если хоть один из них.

Проверка textBox на пустоту
Как проверить ТекстБокс на пустоту? Добавлено через 1 минуту Вернее, как сделать так, чтобы.

Проверка на пустоту textBox’a
на форме 7 textBox. 4 из них должны быть заполнены а в остальные 3 выводится результат. нужно.

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

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

Школа онлайн с государственным аттестатом