Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/156.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ MFC在执行自定义验证之前初始化日期时间选择器控件_C++_Mfc - Fatal编程技术网

C++ MFC在执行自定义验证之前初始化日期时间选择器控件

C++ MFC在执行自定义验证之前初始化日期时间选择器控件,c++,mfc,C++,Mfc,我有一个带有两个datetime控件的对话框,其格式设置为time。一个表示开始时间,另一个表示结束时间 其中一个要求是开始时间不能早于结束时间,结束时间不能早于开始时间 因此,我通过SetTime()函数在当前时间之前一小时初始化结束时间 我的问题是,我正在初始化OnInitDialog()方法中的两个控件,但是DoDataExchange()在OnInitDialog()函数之前运行,因此开始时间和结束时间完全相同,这会导致验证失败,无法创建对话框。日期的检查是在一个自定义验证器中完成的,我

我有一个带有两个datetime控件的对话框,其格式设置为time。一个表示开始时间,另一个表示结束时间

其中一个要求是开始时间不能早于结束时间,结束时间不能早于开始时间

因此,我通过
SetTime()
函数在当前时间之前一小时初始化结束时间

我的问题是,我正在初始化
OnInitDialog()
方法中的两个控件,但是
DoDataExchange()
OnInitDialog()
函数之前运行,因此开始时间和结束时间完全相同,这会导致验证失败,无法创建对话框。日期的检查是在一个自定义验证器中完成的,我从中改编

如何首先初始化datetime控件?或者我可能没有正确地处理这个问题,或者我遗漏了什么

OnInitDialog()中

上面的函数只返回一个
CTime
对象。 作为参考,验证程序如下所示:

void CNewManualEntryDlg::TimePickerValidation(CDataExchange* pDX)
{
    CTime startTime;
    CTime endTime;
    m_dtStartTime.GetTime(startTime);
    m_dtEndTime.GetTime(endTime);

    BOOL isStartTimeBehindEndTime = startTime > endTime;
    CString errorMsg;
    if (!isStartTimeBehindEndTime)
    {
        errorMsg += "Error - Start time cannot be ahead of end time\n";
    }
    if (!errorMsg.IsEmpty())
    {
        ::AfxMessageBox(errorMsg);
        pDX->Fail();
        return;
    }
}

我只是在
DoDataExchange()
中调用它:

void CNewManualEntryDlg::DoDataExchange(CDataExchange* pDX)
{
   CDialogEx::DoDataExchange(pDX);

   DDX_Control(pDX, IDDT_STARTTIMEPICKER, m_dtStartTime);
   DDX_Control(pDX, IDDT_ENDTIMEPICKER, m_dtEndTime);

   TimePickerValidation(pDX);
}

您总是在进行验证。始终意味着,在将数据加载到对话框中以及提交数据时,您正在执行验证

DoDataExchange()
以两种方式调用。您可以确定
pDX->m_2;bSaveAndValidate
以检查您是否处于保存阶段

if (pDX->m_bSaveAndValidate)
   TimePickerValidation(pDX);

您总是在进行验证。始终意味着,在将数据加载到对话框中以及提交数据时,您正在执行验证

DoDataExchange()
以两种方式调用。您可以确定
pDX->m_bsave和validate
以检查是否处于保存阶段

if (pDX->m_bSaveAndValidate)
   TimePickerValidation(pDX);

在DoDataExchange中移动SetRange和SetTime调用有什么问题?将
SetTime
放入
DoDataExchange
不会覆盖用户通过对话框控件输入的内容吗?pDX->m_bsaveand Validate会让您知道。在DoDataExchange中移动SetRange和SetTime调用有什么问题?将
SetTime
放入
DoDataExchange
覆盖用户通过对话框控件输入的内容?pDX->m_bsavea和Validate会让您知道。谢谢!我不知道
DoDataExchange()
是双向的(即初始化时验证和输入时验证),谢谢!我不知道
DoDataExchange()
是双向的(即初始化时验证和输入时验证)