Скачать демонстрационный проект
- 36 Kb
Описание
Класс, который представлен здесь, позволяет
определить какие символы разрешено вводить
пользователю, такие как только цифры, или цифры,
десятичные точки и знаки, или символы
шестнадцатиричного исчисления и т.д.
Класс CAutoEdit
Класс CAutoEdit
наследуется class is derived from the
normal CEdit
class.
Метод SetMaxChar
позволяет Вам определить
максимальное количество символов, допустимое
для данного поля. Если это количество достигнуто,
то фокус автоматически перескакивает на
следующее поле, осуществляя тем самым
эффективный ввод данных. Следующий метод SetExitChar
позволяет Вам определить один дополнительный
символ, который будет использоваться для выхода
из данного поля, как это делает, к примеру, TAB. Это
удобно в случаях, когда Вы хотите использовать
десятичную точку для перехода на следующее поле
и т.д.
Класс CAutoEdit
использует в качестве
обработчика ошибок класс CEditValidate
с
виртуальной функцией validate
Этот класс присоединяется к CAutoEdit
посредствам метода SetValidationHandler
. Всякий раз,
когда CAutoEdit
теряет фокус, то вызывается
метод validation
. При этом проверяется
содержимое поля, форматируется и, при
необходимости генерируется сообщение об ошибке.
Если сообщение об ошибке сгенерировано, то
происходит следующее:
- Фокус остаётся на поле, содержащем ошибку и
содержимое поля выделяется
- Сообщение об ошибке выводится в маленькое
окошко прямо над полем, содержащем ошибку. Для
этого используется класс
CInfoWnd
.
Такой режим позволяет пользователю исправить
ошибочный ввод без необходимости удаления
окошка с пояснением ошибки. Как только поле ввода
будет исправлено, сообщение об ошибке исчезнет
автоматически. Пользователь не сможет выбрать
другое поле до тех пор пока не исправит ошибку в
текущем поле, за исключением кнопки CANCEL.
Для использования этого класса в своём проекте,
Вам необходимо включить в проект файлы autoedit.h,
autoedit.cpp, infowmd.h и infownd.cpp. В Вашем диалоге измените
поля CEdit
на CAutoEdit
и добавьте
следующий код в OnInitDialog
:
//
BOOL CTestDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// Устанавливаем режим для каждого поля редактирования
m_Edit1.SetMaxChars(2);
m_Edit1.SetValidChar(_T("0123456789"));
m_dayValidate = new CDayValidate;
m_Edit1.SetValidationHandler(m_dayValidate);
m_Edit1.SetDefaultValue(_T("01"));
m_Edit1.SetText();
m_Edit2.SetMaxChars(2);
m_Edit2.SetValidChar(_T("0123456789"));
m_monthValidate = new CMonthValidate;
m_Edit2.SetValidationHandler(m_monthValidate);
m_Edit2.SetDefaultValue(_T("01"));
m_Edit2.SetText();
m_Edit3.SetMaxChars(4);
m_Edit3.SetValidChar(_T("0123456789"));
m_yearValidate = new CYearValidate;
m_Edit3.SetValidationHandler(m_yearValidate);
m_Edit3.SetDefaultValue(_T("2000"));
m_Edit3.SetText();
m_Edit4.SetMaxChars(8);
m_Edit4.SetValidChar(_T("10"));
m_binValidate = new CBinValidate;
m_Edit4.SetValidationHandler(m_binValidate);
return TRUE; // возвращаем TRUE до тех пор, пока Вы
// не установите фокус на элемент управления
}
//