可能LISTCTRL中只有2行,0 和1 。m_BranchInfo.DeleteItem(0);  调用后只剩下1行了,m_BranchInfo.DeleteItem(1); 中的参数1是个非法的INDEX了,应该再调用m_BranchInfo.DeleteItem(0);

解决方案 »

  1.   

    if   (nResponse   ==   IDOK)   

    m_BranchInfo.DeleteItem(0); 
    m_BranchInfo.DeleteItem(0); 
    }
    -----------
    自动向前移的
      

  2.   

    while(m_BranchInfo.DeleteItem(0))或者deleteAllItem()
      

  3.   

    要想删除一个列表中的一行或者多行,应该在删除之前记下所有被选中的行的Index,然后再把它们一一删除,而删除时再每删除一行,就要把余下待删除的Index减1。试试下面行不:
    POSITION pos = m_BranchInfo.GetFirstSelectedItemPosition(); 
    int Count = m_BranchInfo.GetSelectedCount();   
    int* SelectedItem = new int[Count];    //用来保存选中的项的索引
    int* SelItem = SelectedItem;
    for( int i=0; i<Count; i++ )
    {
       //保存选中的项的索引
       *SelItem = m_BranchInfo.GetNextSelectedItem( pos );
       SelItem++;
    }
    int Deletedn = 0;   //记录已删除项的个数
    SelItem = SelectedItem;
    for( i=0; i<Count; i++ )
    {
       //删除时把索引相应减小
       m_BranchInfo.DeleteItem( *SelItem - Deletedn );
       SelItem++;
       Deletedn++;
    }
    delete [] SelectedItem;我试了一下,应该可以的。只不不知道在删除之前进行了Sort操作会不会影响。因为这种做法要求先删除index小的才会对,如果担心有问题,可以把选中的项的Index选从小到大排序,然后再这样删除就应该是万无一失了。
    你可以再搜一下看有没有更好的办法。
      

  4.   

    可能更应该这样做:
    POSITION pos = m_BranchInfo.GetFirstSelectedItemPosition();
    int nSelectedItem;
    while(pos)   
    {  
       nSelectedItem = m_BranchInfo.GetNextSelectedItem(pos);
       m_BranchInfo.DeleteItem(nSelectedItem);
       pos = m_BranchInfo.GetFirstSelectedItemPosition();
    }这样就一定不会出问题了。因为每次删除一项后会重新定位已选中的项,这样每次都是在删除选的第一项而已。