对话框模式下MFC
VC6
界面上有一个BUTTON和一个LISTBOX,想实现点击BUTTON就把一句话插入到LISTBOX里去,于是在void CSortDlg::OnOpen()(button的ID是IDOPEN) 里写了
CListBox* pCtrl = (CListBox*)GetDlgItem(IDC_LIST1); 
pCtrl->AddString(cstrTemp) ; 
但是没用,listbox里还是空空如也
但是相同的话在VC2005里就可以用,不知道为什么,请达人解释下谢谢。

解决方案 »

  1.   

    pCtrl->AddString(cstrTemp);改为
    pCtrl->AddString( _T("123456") );
    试试看!
    如果还不行,则看看 pCtrl 等于多少!
      

  2.   

    pCtrl->AddString(cstrTemp) ; 
    调试显示这句话没有起作用,不知道为什么?
      

  3.   

    CListBox* pCtrl = (CListBox*)GetDlgItem(IDC_LIST1); 
    pCtrl->AddString(cstrTemp) ; 
    应该是没错的,你看看cstrTemp是不是空的,没有值,调试看看
      

  4.   

    楼主,我在vc2008和vc6下都试了你上面的代码,都是可以添加的,效果是一样的。
    问题应该出在别的地方。看看cstrTemp是否为空?
      

  5.   

    整个是:
    void CSortDlg::OnOpen() 
    {
    // TODO: Add your control notification handler code here
    CFile mFile;
    CFileDialog dlg(TRUE);
    if (dlg.DoModal()!=IDOK)
    return;
    if(!mFile.Open(dlg.GetPathName(),CFile::modeRead))
    {
    MessageBox("无法打开文件!");
    return;
    }
    CStringArray arCstr;
    CString cstrTemp;
    char cStr[50];
    int j=0;
    mFile.Read(cStr,mFile.GetLength()-1);
    for(int i=0;i<(long)mFile.GetLength()-1;i++)
    {
    if(cStr[i]!=32 && cStr[i]!=13 && cStr[i]!=10)
    cstrTemp=cstrTemp+cStr[i];
    if(i!=(int)mFile.GetLength()-2 && (cStr[i]==32 || cStr[i]==13 || cStr[i]==10) && (cStr[i+1]!=32 && cStr[i+1]!=13 && cStr[i+1]!=10))
    {
    arCstr.Add(cstrTemp);
    CListBox* pCtrl = (CListBox*)GetDlgItem(IDC_LIST1);  pCtrl->AddString(_T("123456")) ; 
    if(pCtrl->GetCount()==0)
    MessageBox("!");
    cstrTemp="";
    }
    }
    return;

    }
    老大们不要笑我,我菜得很,实在不懂
      

  6.   

    可是用pCtrl->AddString( _T("123456") ); 
    这句也不行啊,是否我的VC有问题么?
      

  7.   

    你在pCtrl->AddString( _T("123456") ); 这句设个断点,我想应该进不去,就是说没有执行到你试试
      

  8.   

    你做个实验吧,再弄一个button,
    CListBox* pCtrl = (CListBox*)GetDlgItem(IDC_LIST1); 
    pCtrl->AddString(_T("123456") ) ; 
    就放这两句,能显示出的
      

  9.   

    cStr[i]==32这个条件判断什么意思,我想读文件里面的字符串的话应该没有单个字符有32这个值吧,最小的A也是从65开始算的
      

  10.   

    不是吧?IF条件里的其他语句可以执行啊,我在VC05下调试通过啊!
      

  11.   

    加UpdateData(FALSE)有用,不用这个都可以显示
      

  12.   

    我只能说不是GetDlgItem的问题!
    ,就这样了,那样的程序我直接就会出错,上面程序后精简的程序 CFile mFile; 
    CFileDialog dlg(TRUE); 
    if (dlg.DoModal()!=IDOK) 
    return; 
    if(!mFile.Open(dlg.GetPathName(),CFile::modeRead)) 

    MessageBox("无法打开文件!"); 
    return; 

    CStringArray arCstr; 
    CString cstrTemp; 
    char cStr[50]; 
    int j=0; 
    mFile.Read(cStr,mFile.GetLength()-1); 
    for(int i=0;i <5;i++) 
    {  CListBox* pCtrl = (CListBox*)GetDlgItem(IDC_LIST1); 

    pCtrl->AddString(_T("123456")) ; 
    if(pCtrl->GetCount()==0) 
    MessageBox("!"); 

    } 上面的循环我用(long)mFile.GetLength()-1就会最后程序终止出错,换成5就OK,如果把上面的开文件全去掉就可以看见5次123456我只能说程序本身有点问题,至少在vc6的环境上
      

  13.   

    另外mFile是Cfile类型的,怎么能GetLength,至少换成字符串cStr吧 试试
      

  14.   

    学习了,早就听说VC6.0一堆bug...