MFC中List box的用法

来源:互联网 发布:mp3音量调节软件 编辑:程序博客网 时间:2024/06/07 19:39
List Box应该是同时具有Edit Control和Combo Box的一些特性.说它像前者因为它可以把所有的内容分行显示出来(但不可编辑),所以一般起显示信息的作用.而Edit Control主要是让用户输入信息,它也可以让用户输入多行信息,要是把它设成Read Only的话初看起来跟List Box样子还真像的.


另外嘛List Box有类似Combo Box的一些操作,比如AddString添加一行内容,然后删除,选择某一行(与combo不同,它可以设置成选项多行),然后点击某一行时还可以进行一些消息处理啊.


 


List Box使用简介
常用属性:
Horizontal Scroll:内容过多时水平方向有滚动条


Vertical Scrollbar:垂直方向有滚动条.


Selection:是否可选多行.Single只能选单行.Extended表示按住Ctrl时可选多行,Multipe表示可选多行.


Sort:是否按每行的字母排序.


 


常用方法:
先给控件绑定一个变量


CListBox m_comboShow;


 


m_comboShow.AddString("boy");


m_comboShow.AddString("girl"); //插入一行数据


m_comboShow.InsertString(0,"human"); //在指定的索引插入数据,索引从0计数


m_comboShow.DeleteString(1); //删除指定索引所在行的数据


m_comboShow.ResetContent(); //删除所有数据


m_comboShow.SelectString(0, _T("boy")); //选中字符串为boy的那一行.




int ind = m_comboShow.FindString(0, "girl"); //从索引0开始查找内容为girl的数据,如找到则返回索引号.


int index = m_comboShow.GetCurSel(); //返回当前被选行索引


CString szInfo;


m_comboShow.GetText(index, szInfo); //获取指定索引行的内容


 


获取多行数据
假如设置成Multipe,可以选项多行,怎么得到选择的结果呢?


首先我们想到的自然是要获得所以被选行的行的索引号.


int selRows = m_comboShow.GetSelCount(); //共选择了多少行.


CArray<int> arrSel;  //定义个动态数组来保存选择的索引号


arrSel.SetSize( selRows);


m_comboShow.GetSelItems(selRows, arrSel.GetData()); //获得了所有被选索引


 


只要有了这些索引信息就不管是得到具体的值,或者是删除所有选中的项就都比较好办了.


只要遍历下数据arrSel,然后通过GetText获取值,或者通过DeleteString删除值


 


消息处理
选择不同的项通过ON_LBN_SELCHANGE(...)就行了,当有选不同的选项时,可判断选了哪一行,然后实现不同的操作.


如果是处理鼠标双击某项则是ON_LBN_DBLCLK



首先在头文件中创建对象,<br>CSGrid m_proViewList;<br>//创建表头<br>#pragma region 建立grid表的标题
m_proViewList.AppendColumn(_T("ID"),60);
m_proViewList.AppendColumn(_T("名称"), 300);
m_proViewList.AppendColumn(_T("规格"), 130);
m_proViewList.AppendColumn(_T("类别"), 200);
m_proViewList.AppendColumn(_T("主设备或配套"), 150);
m_proViewList.AppendColumn(_T("单位"), 100);
m_proViewList.AppendColumn(_T("税前单价"), 100);
m_proViewList.AppendColumn(_T("税后单价"), 100);
m_proViewList.Create(this, IDC_VIEWLIST);
#pragma endregion 建立grid表的标题<br><br>
#pragma region 预览配套表
COdbcDatabase *pDataBase = NULL;
CString sData;
pDataBase = new COdbcDatabase;
sData.Format(_T("%sData\\%s"), GetAppRoot(), PROVIEW);
if (!pDataBase->InitializeWithPath(sData))
{
return FALSE;
}
CString sQuery;
CStringList slResults;
CString sResults;
sQuery.Format(
_T("SELECT [Id], [名称], [规格], [类别], [生产厂家], [单位], [税前单价], [税后单价] ")
_T("FROM %s"), TABLE_MATERIAL);
slResults.RemoveAll();
pDataBase->GetQuery(sQuery, slResults);//将数据库中的内容保存到slResult中
POSITION rPos;
rPos = slResults.GetHeadPosition();//获得第一个字符串的位置
int row = 0;
while (rPos != NULL)
{
CStringArray str;
sResults = slResults.GetNext(rPos);//得到第一个字符串,保存到sResult中
SplitString(sResults, str, _T(","));//将字符串按照“,”分开保存到str中
m_proViewList.AppendRow();//将listbox添加一行
CSGridRow *pRow = m_proViewList.GetRowPtr(row);//获得第一行的指针
row++;
(*pRow)[0].SetText(str.GetAt(0));//向第一行中的每一列中添加数据
(*pRow)[1].SetText(str.GetAt(1));
(*pRow)[2].SetText(str.GetAt(2));
(*pRow)[3].SetText(str.GetAt(3));
(*pRow)[4].SetText(str.GetAt(4));
(*pRow)[5].SetText(str.GetAt(5));
(*pRow)[6].SetText(str.GetAt(6));
(*pRow)[7].SetText(str.GetAt(7));
}
delete pDataBase;
pDataBase = NULL;
m_proViewList.SetReadOnly(TRUE);

  


0 0
原创粉丝点击