当前位置:C++技术网 > 资讯 > 列表框应用之索引功能实现

列表框应用之索引功能实现

更新时间:2015-06-26 13:12:20浏览次数:1+次

    在2001版的MSDN中有个索引功能,就是上面一个编辑框,下面一个列表框,当你在编辑框中输入时,列表框中会将以你输入开头的文本设置到列表框的顶部(以下称为置顶),当然前提是列表框中有与之匹配的文本,查询过程需要结合数据库知识。下面将其实现过程和遇到的问题阐述如下:
    首先,在初始化时对数据进行遍历,将你想要的内容(比如:姓名,这一列)显示到列表框中。给编辑框添加EN_CHANGE消息处理函数,顾名思义,也就是编辑框中发生变化时就会触发。在函数中,获取编辑框中文本,利用SQL语句进行通配符过滤查找,以编辑框中内容为开头,例如:
GetDlgItemText(IDC_EDIT,m_DataIn);//获取编辑框中文本到m_DataIn
if(m_DataIn)
    sql.Format(L"select * from T_Test where 姓名 like'%s%%'",m_DataIn);//两个%别忘了

    执行SQL语句,将数据库记录集返回值的第一个值记下来,记为Res;利用ListBox的成员函数FindStringExat查找与Res相同的索引,然后将其选中并置顶即可。
    其次,实现第二个功能:当点击列表框中某一项时,将该项内容设置到编辑框中,但是并不在编辑框置顶(注意:这就是我的问题所在)。给列表框添加LBN_SELCHANGE消息处理函数,也就是单击列表框中某一项时会触发。函数中实现如下:获取当前项索引,并根据索引获取文本,比如获取到变量SelText中,将该文本设置到编辑框中即可。我的问题是:此时编辑框会发生变化,会执行EN_CHANGE响应函数,而在函数中会将列表框中点击的那一项置顶,而MSDN中的索引功能并不会将该项置顶。解决办法:设置一个全局标识,点击时设置为FALSE,在编辑框中文本改变是检测这个标识,如果为FALSE则不触发置顶即可。
    以上就是整个实现过程和遇到的问题以及解决方法,这个实现过程和问题比较具体,有些地方讲得并不是很清楚,如果是这样,请看一下MSDN中索引这个功能。
 
    以上内容如有不当之处,欢迎各位提出来并进行探讨!