Главная » C++, C++ Builder » Проверка данных после ввода C++ Builder

0

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

CBuilder также может помочь вам в этих случаях в проверке данных после ввода. Для проверки данных после ввода их пользователем вам нужно добавить обработчик события OnExit для поля ввода. Для демонстрации как это делается, нужно добавить обработчик для события OnExit второго поля ввода, Edit2. Добавьте следующий код в этот новый обработчик:

void __fastcall TForm1::Edit2Exit(TObject *Sender)

{

BOOL bFlag = TRUE;

char *s = Edit2->Text.c_str();

// Во-первых, проверяем что все символы — цифры

for (int i=0; i<(int)strlen(s); ++i)

{

char c = s[i];

if ( !isdigit(c) ) bFlag = false;

}

// Смотрим, прошел ли тест

if (  bFlag == false)

{

MessageBox(NULL,

"В это поле можно вводить только цифры!", "Ошибка", MB_OK);

Edit2->SetFocus(); return;

}

// Теперь проверяем диапазон (1..10) long lVal = atol(Edit2->Text.c_str()); if ( lVal < 1 || lVal > 10)

{

MessageBox(NULL,

"В это поле можно вводить только значения от 1 до 10!", "Ошибка", MB_OK);

Edit2->SetFocus(); return;

}

}

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

Замечание

Если вы работали с Windows SDK, то вы вероятно пытались сделать что-то подобное, обрабатывая сообщение WM_KILLFOCUS. Если так, то вы, вероятно, знаете, что попытка отображения окна с сообщением во время обработки сообщения WM_KILLFOCUS приводит к бесконечному циклу, который в конце концов рушит программу. Не бойтесь этих преданий старины; CBuilder не имеет таких проблем. Вы можете отображать окна с сообщениями, менять фокус ввода или делать еще что угодно в обработчике события OnExit. Это современная эра программирования, а не темные годы.

Я надеюсь, вы получили хороший урок в этом примере по поводу проверки  ввода.  Давайте коротко повторим основные моменты проверка данных в полях ввода в CBuilder:

·                       Для обработки отдельных нажатий клавиш нужно установить свойство формы KeyPreview в

true.

·                       Когда вы обрабатываете ввод посимвольно для полей ввода, ставьте значение символа в 0,

чтобы не допустить его добавление в поле ввода.

·                       Вы можете убрать обработку события, установив указатель на обработчик события для данного объекта в NULL. Так, чтобы убрать посимвольную обработку в поле ввода, вам нужно поставить Edit1->OnKeyPress = NULL.

·   Для проверки  ввода при  попытке пользователя покинуть поле ввода обрабатывайте событие OnExit. В добавление к этому, если вам нужны какие-либо действия  при  переключении пользователя в поле ввода, обрабатывайте событие OnEnter.

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

Источник: Теллес М. – Borland C++ Builder. Библиотека программиста – 1998

По теме:

  • Комментарии