MFC 数据验证

Posted

技术标签:

【中文标题】MFC 数据验证【英文标题】:MFC Data validation 【发布时间】:2018-06-13 07:01:27 【问题描述】:

假设我定义了一个名为 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】:

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

【讨论】:

以上是关于MFC 数据验证的主要内容,如果未能解决你的问题,请参考以下文章

如何在 MFC 的功能区文本框中实现数据验证

mfc CEdit 啥时候应该进行验证?

MFC的DDX和DDV机制

dskinlite(uieasy mfc界面库)使用记录1: schema验证xml

更新数据库 MFC C++ ODBC CRecordset

mfc连接sqlserver