Проверка данных MFC - PullRequest
       1

Проверка данных MFC

0 голосов
/ 13 июня 2018

Предположим, что я определяю диалог MyDialog, который наследуется от CDialog

У MyDialog есть CEditBox, который определяется в ресурсе следующим образом

EDITTEXT        IDC_AMOUNT,40,127,35,14
PUSHBUTTON      "OK",IDOK,51,193,50,14

Вот DoDataExchange MyDialog

void MyDialog::DoDataExchange(CDataExchange* pDX)
{
   DDX_Text(pDX, IDC_AMOUNT, amount);
}

сумма является переменной типа double.Я понимаю, что если я ввожу значение, не равное двойному, для элемента управления IDC_AMOUNT и нажму OK, MFC отобразит окно сообщения со следующим сообщением

Please enter a number

Но мне интересно, скрываю ли я CEditBox со следующими утверждениями:

CWnd* pWnd=GetDlgItem(IDC_AMOUNT);
ASSERT(pWnd);
pWnd->ShowWindow(FALSE);

затем после этого, когда я нажимаю OK, MFC выполняет проверку еще раз IDC_AMOUNT.Другими словами, выполняет ли MFC проверку против скрытых элементов управления?

1 Ответ

0 голосов
/ 13 июня 2018

MFC только проверяет все элементы управления, которые вызывают процедуру DDX в DoDataExchange.

Процедуры DDX никогда не проверяют, включен ли элемент управления или скрыт.

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

void MyDialog::DoDataExchange(CDataExchange* pDX)
{
   // Only if saving and visible
   if (pDX->m_bSaveAndValidate && GetDlgItem(IDC_AMOUNT)->IsWindowVisible())
       DDX_Text(pDX, IDC_AMOUNT, amount);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...