DDX_Text(pDX,IDC_EDIT1,m_nEdit1);
DDV_MinMaxInt(pDX,m_nEdit1,0,100);在OnInitInstance()中初始化 m_nEdit=0;
在编辑框输入300(>100)按取消 或关闭 再次打开编辑框300竟然进去了,
怎么限制非法输入不进入呢?是不是对话框数据交换机制不那么完善?

解决方案 »

  1.   

    应该不会进去的,你是不是在哪操作m_nEdit1了
      

  2.   

    LZ在OnCancel或其他函数进行了处理,保存了edit值
      

  3.   

    在重载基类的OnInitInstance函数的时候,要在函数末尾调用基类的OnInitInstance函数,因为这个函数要调用Update函数,Update函数要调用DoDateExchange函数,DoDateExchange使用了DDX和DDV.
    OnInitInstance只负责初始化数据,左右的DDX和DDV都放在DoDateExchange里就可以完成数据交换和校验.
    如果是无模式Dialog,在重载OnOK函数的时候,务必调用基类的OnOK函数,或者务必调用Update函数.不知道楼主为什么会出现异常情况.
      

  4.   

    若没有重载OnOK和OnInitInstance(),不也是可以的吗
      

  5.   

    我试了 在输入不符合范围的数据 再按下Cancel或 Esc 或关闭按键时,非法数据都会进入数据成员
    DDX_Text(pDX, IDC_EDIT1, m_nEdit);
    DDV_MinMaxInt(pDX, m_nEdit, 0, 100);
    想想也知道,DDX是先交换数据DDV则在交换后检验
    反过来呢,先DDV在DDX,也不行,先校验的数据是以前的数据,
    真他妈不知道VC怎么搞的,我知道有解决办法,谁给一个吧。
      

  6.   

    一般只重载DoDataExchange函数,一般情况下先DDX后DDV