两个edit框 int m_edit1,m_edit2;
一个spin控件   CSpinButtonCtrl m_spin;
spin控制edit1的数值:Auto Buddy   Set Buddy integer都勾上了
tab order紧挨着edit1.点spin上下edit1界面数值会上下动.
OnInitDialog()里头添加:m_spin.setrange(1,10);
类初始化里头: m_edit1 = 1; m_edit2 = 1;
添加spin响应函数:OnDeltaposSpin(...)
里面加    UpdateData();
m_edit2=m_edit1;
UpdateData(FALSE);效果应该是点spin之后edit2会随着edit1同步变化。但是事实上edit2总是比edit1慢一步。也就是edit1从1变成2,edit2不变
edit1变3了。edit2才从1变成2。用debug在OnDeltaposSpin(...)里头加breakpoint发现UpdateData()之后
尽管界面上头的数值已经变了,但是m_edit1并没有变。
好奇怪。
求高人指点。代码没有问题。可以自己回去试试。

解决方案 »

  1.   

    应该在Edit1的变化响应函数里添加
    m_nEdit2=m_nEdit1
    m_cEdit1.UpdateData()
      

  2.   

    void CMy2002Dlg::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) 
    {
    // TODO: Add your message handler code here and/or call default
    UpdateData();
    m_edit2=m_edit1;
    UpdateData(FALSE);
    CDialog::OnVScroll(nSBCode, nPos, pScrollBar);
    }
      

  3.   

    sun:序号edit1之后是spin再后面是edit2.Life:m_cEdit1.UpdateData();放在OnChangeEdit1() 里面会出现assertion failed错误。选择忽略之后会出现dialog。但是点击spin只有edit1发生变化,edit2不变。
    我后来在OnChangeEdit1()里头加了以下代码:
    UpdateData(TRUE);
    m_edit2=m_edit1;
    UpdateData(FALSE);
    也会出现四次assertion failed错误和两次试图执行系统不支持操作。都忽略之后。可以实现edit1和edit2同步变化。
    但是程序有错总不是办法。大虾们救命啊大虾们救命啊
      

  4.   

    jump是对的。高手。放分。谢谢啦。