我有FROM和TO日期的两个日期时间选择器控件。我想将TO日期开始日期限制为FROM日期。
示例:如果FROM日期是2013年4月12日 TO日期选择器应允许用户仅从2013年12月4日到当前日期选择日期。
DoDataExchange()方法中的代码如下。
DDX_Text(pDX, IDC_DATETIME_FILTER_FROM, m_daysStartDateVal);
DDV_MinMaxDateTime(pDX, m_daysStartDateVal,&StartDate,&COleDateTime::GetCurrentTime());
DDX_Text(pDX, IDC_DATETIME_FILTER_TO, m_daysEndDateVal);
DDV_MinMaxDateTime(pDX,m_daysEndDateVal,&m_daysStartDateVal.GetTickCount(),&COleDateTime::GeCurrentTime());
每当我更改FROM日期时,它都不会反映TO日期选择器中的可能日期。
如何将其限制为FROM日期的开始日期?
答案 0 :(得分:2)
对话框数据验证不起作用。您只能指定(静态)范围,并且例程会验证您的值是否在该预定义范围内。您可以使用自己的验证例程扩展此机制。
下面的示例函数需要两个变量和一个范围,并确保
void AFXAPI DDV_MinMaxDates(
CDataExchange* pDX,
COleDateTime& fromValue, COleDateTime& toValue,
const COleDateTime* refMinRange, const COleDateTime* refMaxRange)
{
if(fromValue > toValue ||
fromValue < refMinRange || fromValue > refMaxRange ||
toValue < refMinRange || toValue > refMaxRange)
{
AfxMessageBox(_T("Incorrect interval!"));
pDX->Fail();
}
}
你可以像这样使用它:
DDV_MinMaxDates(pDX, m_daysStartDateVal, m_daysEndDateVal, &StartDate,&COleDateTime::GetCurrentTime());
答案 1 :(得分:0)
如果您希望CDateTimeCtrl
控件根据两个控件中的当前输入动态更改允许的范围,则可以使用CDateTimeCtrl::SetRange
。要在每次更改其中一个控件时调用SetRange
,您应该处理发送给父级的DTN_DATETIMECHANGE
通知。