DDX_LBString(pDX, IDC_LIST1, m_Username);UpdateData();
UINT delstr = 0;
CString str;
CStdioFile fileb(_T("D:\\\\DATAT\\index.dat"),CFile::modeRead);
while(fileb.ReadString(str))
  {
if (str==m_Username)
{
((CListBox*)GetDlgItem(IDC_LIST1))->DeleteString(delstr);
break;
}
++delstr;
  }
UpdateData(FALSE);例如ListBox里有
1
2
3
4
我想删除2,但是执行完毕以后ListBox里面的项目会变成
1
2
4

解决方案 »

  1.   

    ((CListBox*)GetDlgItem(IDC_LIST1))->DeleteString(delstr-1);你要删除2没错,但2在列表中的序号是1啊。DeleteString的参数是序号,不是内容
      

  2.   

    改为
    UpdateData();
    UINT delstr = 0;
    CString str;
    CStdioFile fileb(_T("D:\\\\DATAT\\index.dat"),CFile::modeRead);
    while(fileb.ReadString(str))
      {
        if (str==m_Username)
        {
            delstr = ((CListBox*)GetDlgItem(IDC_LIST1))->FindString(-1,str);
            if ( delstr  != LB_ERR)
             {
              ((CListBox*)GetDlgItem(IDC_LIST1))->DeleteString(delstr);
                 break;            }
          }  }
    UpdateData(FALSE);
      

  3.   

    你可以调试一下啊,看看到执行DeleteString()时delstr的值是多少啊?
    根据你的结果,可能delstr的值可能是2,则把第三行删除了。可能你的index.dat文件的开头有个空行,或其他原因导致,文件中的行跟ListBox中的行对应不上了。