我是用来做用户注册时在密码确认中,要求两个编辑框中的字符串内容一样。
先说明一下 该字符串类型是CString
曾经试用过 Compare来比较,但是都不成功。
不知道是 UpdateData(TRUE)时出错,还是在比较时该转换字符串的类型。

解决方案 »

  1.   

    UpdateData();
    if(0 == str1.Compaer(str2)) //相同
      

  2.   


    有错误,它说  error C2660: 'GetBuffer' : function does not take 0 parameters
    是不是 GetBuffer 函数在什么头文件中,而我没有包含进来?
      

  3.   

    CString str1,str2;
            UpdateData(TRUE);
    str1=m_Edit1;
    str2=m_Edit2;
    if(!str1.Compare(str2))
    {
    AfxMessageBox("两个字符串相等");
    }
    我的是这样的,但是总不成功。除非你什么都不填,按提交时,它就成功。
      

  4.   


    CString str1,str2; 
            UpdateData(TRUE); 
    if(!str1.Compare(str2)) 

    AfxMessageBox("两个字符串相等"); 

    首先把两个变量str1,str2关联到两个CEdit控件上,再运行代码
      

  5.   

    CString str1 , str2 ;
    ((CEdit *)GetDlgItem(IDC_EDIT1)) ->GetWindowsText(str1) ;
    ((CEdit *)GetDlgItem(IDC_EDIT2)) ->GetWindowsText(str2) ;
    if(str1 == str2)
    {
        //...
    }
      

  6.   

    CString::Compareint Compare( LPCTSTR lpsz ) const;返回值:
    如果字符串是一样的则返回非零值;如果CString对象小于lpsz则返回值<0,如果CString对象大于lpsz则返回值>0。参数: lpsz 要用于比较的另一个字符串。  说明:
    此成员函数通过使用通用文本函数_tcscmp来比较这个CString对象和另一个字符串。此通用文本函数_tcscmp是在TCHAR.H中定义的,根据在编译时设置的字符来与strcmp,wcscmp,或_mbscmp对应。这些函数的每一个都根据当前使用的代码页来进行一次区分大小写的比较,而且不会被现场影响。更多的信息,参见“Microsoft Visual C++ 6.0运行库参考”中的strcmp,wcscmp,_mbscmp。示例:下面的例子说明了如何使用CString::Compare。
    // CString::Compare示例:
    CString s1( "abc" );
    CString s2( "abd" );
    ASSERT( s1.Compare( s2 ) == -1 ); // 与另一个CString比较。
    ASSERT( s1.Compare( "abe" ) == -1 ); // 与LPTSTR字符串比较。
      

  7.   

    str1=m_Edit1; 
    str2=m_Edit2;
    你不会是用这两条语句进行的变量关联吧?
    如果m_Edit1和m_Edit2是关联的字符串变量,那CString str1,str2; 就没必要定义
    if (m_Edit1.Compare(m_Edit2) == 0)即可,但愿m_Edit你定义的不是CEdit类
      

  8.   


    ////////////
    xx.h
    CEdit m_str2;
    CEdit m_str1;
    /////////////////
    xx.cpp
            CString mstr1,mstr2; m_str1.GetWindowText(mstr1);
    m_str2.GetWindowText(mstr2); if (!mstr1.Compare(mstr2))  {
    AfxMessageBox("两个字符串相等");
    }
    else{
    AfxMessageBox("两个字符串不相等");
    }
      

  9.   


    ////////////
    xx.h
    CEdit m_str2;
    CEdit m_str1;
    /////////////////
    xx.cpp
            CString mstr1,mstr2; m_str1.GetWindowText(mstr1);
    m_str2.GetWindowText(mstr2); if (!mstr1.Compare(mstr2))  {
    AfxMessageBox("两个字符串相等");
    }
    else{
    AfxMessageBox("两个字符串不相等");
    }
      

  10.   

    我说明一下。m_Edit1  和 m_Edit2 是两个编辑框的变量
      

  11.   

    //m_Edit1  和 m_Edit2 是两个编辑框的变量 ,CString吧?
    //在我这里试是正确的。
    UpdateData();
    if(!m_Edit1.Compare(m_Edit2))
    {
    }
      

  12.   

    两个控件是CString的情况下测试没有问题
      

  13.   

    设个断点在if前面看看str1和str2的值
      

  14.   

    晕死,这么长时间非在这里纠缠是CString还是CEdit类型。
    CString 和CEdit你怎么定义就怎么来么。如果定义CString类型的,16楼的代码没问题,我测试也通过。如果定义CEdit类型,在里面定义临时变量CString str1,str2来接收内容12楼的代码也测试过了。此贴结束!
      

  15.   

    看来最大的可能是,你没用正确关联变量,你使用vc提供的向导(ctrl+w),选择"Member Variables"页,双击要关联变量的ID,重新关联你的变量,不要直接写在.h文件下.
      

  16.   

    CString str1;
    CString str2;
    GetDlgItemText(IDC_EDIT1, str1);
    GetDlgItemText(IDC_EDIT2, str2);
    if(str1 == str2)
    {
        AfxMessageBox("相等");
    }
    else
    {
        AfxMessageBox("不相等");
    }
      

  17.   

    Compare不用那么麻烦
    CString str1
    CString str2
    直接
    if (str1.Compare(str2))
      

  18.   

    Compare的返回类型是int型,虽然可以按布尔型的方法判断,但这不是一个好习惯
      

  19.   

       各位大哥还是不行,要不你们自己做一个对话框,上面做两个编辑框,一个确定按钮。
    使用vc提供的向导(ctrl+w),选择"Member Variables"页,双击要关联变量的ID,让两个编辑框的变量名分别,为 m_Edit1, m_Edit2;然后在确定按钮下加上下面代码:CString str1,str2; 
    UpdateData(TRUE); 
    str1=m_Edit1; 
    str2=m_Edit2; 
    if(!str1.Compare(str2)) 

    AfxMessageBox("两个字符串相等"); 

    大哥真的不行啊。
      

  20.   

    楼主如果要做字符串比较,m_Edit1和m_Edit2关联的变量类型应该设为CString,此时
    UpdateData(TRUE); 
    if(!m_Edit1.Compare(m_Edit2)) 

    AfxMessageBox("两个字符串相等"); 

    即可,还有一种情况就是楼主你的VC有问题,请检查DoDataExchange函数下是否有:
    DDX_Text(pDX, IDC_EDIT1, m_Edit1);
    DDX_Text(pDX, IDC_EDIT2, m_Edit2);
    如果没有,请加上去。
      

  21.   

    两个控件我分别定义CEdit、CString类型都试过了。
    上面诸位大哥都说的很清楚了,为什么我这里就是OK呢?
    对你的vc 6.0设置表示怀疑,是不是哪里没设置好。
    帮不上了……
      

  22.   


    我看了看,是有下面的代码的。
    DDX_Text(pDX, IDC_EDIT1, m_Edit1); 
    DDX_Text(pDX, IDC_EDIT2, m_Edit2); 
      

  23.   

      我找到原因了,因为是密码编辑框,我把那两个编辑框的属性 里的password前面打上勾了。
    不打勾时,测试就通过,打上勾后就不行,请问这有什么方法解决?
      

  24.   

    特意试了下,不论是两个都是password还是一个password一个不是,都没问题,楼主还是发代码上来吧
      

  25.   

    与password无关,是不是某个控件的uppercase或lowercase被打上勾了
      

  26.   

     你不如这样,把两个MFC控件和变量相关联,然后用控件的:
     CString cstr1 = m_edt1.GetWidowsText();
     CString cstr2 = m_edt2.GetWidowsText();
     if(0 == cstr1.Compare(cstr2))
     {
       //相同
     } 这样做还有问题你来找我,肯定相同。