如下图所示,有两个列表框,如果选中一项或几项就通过>>按钮把它移动到另一个列表框中,然后还可以通过<<按钮还原。
新手求教,希望vc高手们能够不吝赐教,如果能把过程说的详细点更是万分之不甚感激。

解决方案 »

  1.   


    这个就是你要的Include/Exclude List Boxeshttp://www.codeproject.com/KB/combobox/inclexcllb.aspx
      

  2.   

    把里面的选择的数据取出来,然后添加到右边的列表框里,这个方法最笨最简单了。如:
    for(int i=0;  i<m_list.GetItemCount(); i++)   
    {   
      if( m_list.GetItemState(i, LVIS_SELECTED) == LVIS_SELECTED   )   
      {   
          //获取这个Item值,添加到右边列表框里。
           //delete 这个item 从列表中,删的时候要注意用法,这里仅仅是个列子
       }   
    }//反之亦然,
      

  3.   

    从左边取出选中的Index int GetSelItems( int nMaxItems, LPINT rgIndex )循环去左边的文本 GetText插入右边 AddString 插入的时候要检查是否已经存在;删除 DeleteString
      

  4.   

    首先设定两个ListBox为MultiSelect属性,
    并用ClassWizard添加两个Control类型的变量,左侧为m_LT1;右侧为m_LT2;
    然后给左转右(上面的按钮)添加OnClick事件响应函数OnInsert
    然后给右转左(下面的按钮)添加OnClick事件响应函数OnDelete
    void CIrregularDlg::OnInsert() 
    {
    int nm = m_LT1.GetSelCount(); if( nm < 1 ) return;//判断是否有内容选中 CArray< int,int > arySel;

    arySel.SetSize( nm );
    m_LT1.GetSelItems(nm, arySel.GetData()); //取得选中的所有项的序号 int k2Nm = m_LT2.GetCount();
    for( int ik = 0; ik < nm; ik ++ )
    {
    CString IxTx;
    m_LT1.GetText( arySel[ik], IxTx );//取得某一项的文本
    m_LT2.InsertString(k2Nm,IxTx);//添加到右侧栏中
    k2Nm++;//右侧序号加1
    }
    for( int ih = nm-1; ih > -1; ih-- )  //反向循环从左侧框中清理掉已经进入右侧框的内容
    {
    m_LT1.DeleteString(arySel[ih]);
    } int km = 0;
    while(km < arySel.GetSize())  //清理CArray类型内存防止内存泄露
    {
    arySel.RemoveAt(km);
    }
    arySel.RemoveAll();
    }void CIrregularDlg::OnDelete() 
    {
    int nm = m_LT2.GetSelCount();

    if( nm < 1 ) return;  

    CArray< int,int > arySel;

    arySel.SetSize( nm );
    m_LT2.GetSelItems(nm, arySel.GetData());  

    int k2Nm = m_LT1.GetCount();
    for( int ik = 0; ik < nm; ik ++ )
    {
    CString IxTx;
    m_LT2.GetText( arySel[ik], IxTx ); 
    m_LT1.InsertString(k2Nm,IxTx);     
    k2Nm++;                            
    }
    for( int ih = nm-1; ih > -1; ih-- )
            {
    m_LT2.DeleteString(arySel[ih]);
    } int km = 0;
    while(km < arySel.GetSize())  
    {
    arySel.RemoveAt(km);
    }
    arySel.RemoveAll();
    }