【问题标题】:MFC Data validationMFC 数据验证
【发布时间】: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 是否对隐藏控件执行验证?

【问题讨论】:

    标签: validation 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);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-10-19
      • 2014-10-04
      • 1970-01-01
      • 1970-01-01
      • 2017-02-04
      • 1970-01-01
      • 2021-02-03
      相关资源
      最近更新 更多