Input为一个类,
m_strmean,m_strword为文本框
为什么添加后,老是弹出word为空!
如何避免这种情况!
void Input::OnOK() 
{
     do
      { CString word,mean;    
m_strmean.GetWindowText(mean);
m_strword.GetWindowText(word);
word.TrimLeft();
word.TrimRight();
mean.TrimLeft();
mean.TrimRight(); if(mean=="")
{   MessageBox("Word 不能为空!");
 m_strmean.SetFocus();
 break;
}
if(word=="")
{
MessageBox("word 不能为空!");
m_strword.SetFocus();
break;
}   /*中间为数据添加*/   
      }while(MessageBox("你还想添加记录","询问",MB_YESNO)==IDYES);
 
}

解决方案 »

  1.   

    在OnOK()的开头位置加上
    UpdateData(TRUE);
      

  2.   

    不光是DDX,你的程序逻辑也有问题。你的Do-While中没有获取新的输入的逻辑,不能简单地用一个循环来获取
    下一次输入到文本框的内容。
    void CInput::OnOK()
    {
       UpdateData();   // DDX
       if输入合法  {
             加入记录
             if继续添加   {   
                   return;   // 需要下一次的输入
             }
       }
       ...  // 清理工作

      

  3.   

    CString word,mean;    
    m_strmean.GetWindowText(mean);
    m_strword.GetWindowText(word);//m_strword,m_strmean这两个是控件类变量吧.可以这样取数.不一定非得通过DDX.但你把取数放在循环中就不知何意了.
      

  4.   

    我试了,没问题啊Input是对话框类吧,从哪继承的
    m_strmean,m_strword,这样命名Edit控件,会把自己搞糊涂的你确定你的m_strmean,m_strword两个控件是对应你编辑数据的两个Edit控件?
      

  5.   

    想问问上面哪个return 是什么用法啊?
      

  6.   

    m_strmean,m_strword不是对应你编辑数据的两个Edit控件????
     
    能犯这种错误?I服了you
      

  7.   

    m_strmean,m_strword对应两个控件,updatedata()一下,自己就给m_strmean,m_strword赋值了!直接用!!!!
    估计你犯了低级错误!
      

  8.   


    void Input::OnOK() //点击OK按钮
    {
       UpdateData();   // 用控件中输入的值更新m_strmean, m_strword   if (m_strword == TEXT(""))   // 输入的单词为空
          MessageBox("Word 不能为空!");
       else if (m_strmean == TEXT(""))   // 输入的释义为空
          MessageBox("Mean 不能为空!");
       else {
          ...   // 加入新单词条目
          if (MessageBox("你还想添加记录","询问",MB_YESNO)==IDNO)
                CDialog::OnOK();   // 关闭对话框
       }
    }
      

  9.   

    老大,代码中的名字可读性也太差了吧,做个合格的程序园
    Class CDlgInput :public CDialog