MFC数据验证

时间:2018-06-13 07:01:28

标签: validation mfc

假设我定义了一个名为MyDialog的对话框,该对话框继承自CDialog

MyDialog有一个CEditBox,在资源中定义如下

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

这是MyDialog的DoDataExchange

void MyDialog::DoDataExchange(CDataExchange* pDX)
{
   DDX_Text(pDX, IDC_AMOUNT, 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 :(得分:4)

MFC只会验证在DoDataExchange中调用DDX例程的所有控件。

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);
}