想做LISTBOX的搜索,也就是说listbox列出来的是一些英文,当在搜索栏输入A的时候显出出来开头为A的英文,当输入AB的时候显示出来开头为AB的,不知道应该如何实现有人已经告诉我怎么做了,但是我不会,希望您能帮我完成,我已经开个帖子给50分了,完成后和这个帖子的100分一起给,
希望大家帮帮忙,耽误大家点时间,但是我明天早上着急要,谢谢大家了

解决方案 »

  1.   

    那个帖子的地址http://topic.csdn.net/u/20080601/15/7b15bc71-29eb-49e7-af40-dd473c654455.html?seed=175018547
      

  2.   

    使用系统提供的自动完成功能不是更合适?创建一个IAutoComplete接口并关联到一个EDIT窗口即可,自己仅仅需要实现一个IEnumString接口。
      

  3.   

    我的这个小程序的地址是:http://pickup.mofile.com/7745578945949384 提取码是:7745578945949384
    帮我改动完毕后直接发送到[email protected]就可以了,谢谢您,我收到马上给分
      

  4.   

    给我感觉就是一个联动,比如 LISTBOX中有AB,AD,AC,BA,DB,DC几个数据,当输入A的时候就显示AB,AD,AC几项,当输入AB的时候就显示AB项
      

  5.   

    给我感觉就是一个联动,比如 LISTBOX中有AB,AD,AC,BA,DB,DC几个数据,当输入A的时候就显示AB,AD,AC几项,当输入AB的时候就显示AB项
      

  6.   

    在MSDN的索引中直接输入IAutoComplete就可以找到如何使用自动完成功能,有详细的使用步骤。
      

  7.   


    /*
    实现列表数据的过滤
    源列表可以为空或与源列表相同,此时只对目标列表进行不匹配删除操作
    目标列表和源列表地址不相同时,将从源列表中提取匹配字符列表
    */
    int Filter_List(CListBox *pDstList, //目标列表
                    CListBox *pSrcList, //源列表
                    LPCTSTR pszFilter,  //匹配字符
                    BOOL bMatchCase     //大小写匹配指示
                    )
    {
      ASSERT(pDstList);//确保列表地址有效  if(pSrcList && pSrcList != pDstList) //目标列表和源列表地址不相同
      {
        pDstList->ResetContent();//清除列表
        for(int i=0;i<pSrcList->GetCount();i++)
        {
          CString itemStr;
          pSrcList->GetText(i,itemStr);
          pDstList->AddString(itemStr); //添加字符串
          pDstList->SetItemData(i,pSrcList->GetItemData(i)); //拷贝属性
        }
      }  CString filter = pszFilter;
      int filter_len = filter.GetLength();
      if(filter_len>0 && !bMatchCase) //不匹配大小写
        filter.MakeUpper();  if(strlen(pszFilter) > 0) //匹配字符串长度大于0
      {
        for(int i=0;i<pDstList->GetCount();i++)
        {
          CString itemStr;
          pDstList->GetText(i,itemStr);
          if(!bMatchCase)
            itemStr.MakeUpper();
          if(itemStr.GetLength() >= filter_len
            && itemStr.Left(filter_len) == filter)
          {
          }
          else //不匹配时删除
          {
             pDstList->DeleteString(i);
             i--; //确保下一次从删除后面的列表开始
          }
        }
      }
      
      return(pDstList->GetCount());
    }
    加入 CListBox 变量 m_ListBox,初始化变量放在 m_ListBox 中
    调用
      CListBox *pList = (CListBox *)GetDlgItem(IDC_LIST);
      Filter_List(pList,&m_ListBox,"",false);
    更新显示对话框中加入编辑框的 EN_CHANGE 事件影射
    OnChangeEdit()
    {
      CString str;
      GetDlgItem(IDC_EDIT)->GetWindowText(str); //读取输入字符
      CListBox *pList = (CListBox *)GetDlgItem(IDC_LIST);
      Filter_List(pList,&m_ListBox,str,false);//过滤
    }
      

  8.   

    简便方法:
    创建一个IAutoComplete接口并关联到一个EDIT窗口即可,自己仅仅需要实现一个IEnumString接口。待会我给你发一个网上例子的源码,似乎和你的要求很相似,不知是否晚了没
      

  9.   

    编程步骤
    1.初始化数据的函数,用AddString()添加所有项
    2.编写字串查找函数,BOOL FindStr(CString &str,CSting &child);用于判断
    3.编写一函数储存了不符合条件的所有index的集合.依次提取listbox中的项放入字符数组,调用FindStr判断,如果不满足条件则存起来
    4.在编辑框的EN_CHANGE事件里,按照3提供的索引调用DeleteString()依次删除,其中if(编辑框空),那么调用1显示初始全部数据。
      

  10.   

    CListBox里的FindString()应该可以做到的!