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 数据验证的主要内容,如果未能解决你的问题,请参考以下文章