0

我有两个用于 FROM 和 TO 日期的日期时间选择器控件。我想将 TO 日期开始日期限制为 FROM 日期。

示例:如果 FROM 日期是 2013 年 4 月 12 日,则 TO 日期选择器应允许用户仅选择从 2013 年 4 月 12 日到当前日期的日期。

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 日期的开始日期?

4

2 回答 2

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());
于 2013-04-16T09:16:11.830 回答
0

如果您希望CDateTimeCtrl控件根据两个控件中的当前输入动态更改允许的范围,那么您可以使用CDateTimeCtrl::SetRange. 要在SetRange每次控件之一更改时调用,您应该处理DTN_DATETIMECHANGE发送给父级的通知。

于 2013-04-16T11:07:56.687 回答