最近在学习MFC,边学边总结了一点资料,与初学者一起共勉!
1) 增加记录
Addstring(str);
Insertstring(index,str); 在指定位置加入记录
eg1:将Listbox1中选中内容放入Listbox2中
int index=m_ListboxInput.GetCurSel(); //获取鼠标点击行的索引
CString temp;
if(index==LB_ERR){
AfxMessageBox(_T("请选择要添加的项目!"));
return;
}
m_ListboxInput.GetText(index,temp); //获取点击行,并将其内容放置在temp中;
m_ListBox2.AddString(temp);
eg2:将Listbox1中多行选中内容放入Listbox2中
首先:资源编辑器中修改ListBox2的属性:Selecttion:Multiple
intnCount=m_ListboxInput.GetSelCount();
if(!nCount){
AfxMessageBox(_T("请选择要添加的项目!"));
return;
}
else{
int* buffer = newint[nCount];
//memset(buffer,-1, sizeof(int)*nCount);
CString strItem;
m_ListboxInput.GetSelItems(nCount,buffer);
for(int i=0;i<nCount; i++)
{
m_ListboxInput.GetText(buffer[i],strItem);
m_ListBox2.AddString(strItem);
}
delete[] buffer;
}
2)删除记录
DeleteString(index); //删除某一行;
ResetContent(); //清空ListBox列表
eg3:删除Listbox2中选择行
int index=m_ListBox2.GetCurSel();
if(index==LB_ERR){
AfxMessageBox(_T("请选择要删除的项目!"));
return;
}
m_ListBox2.DeleteString(index);
eg4:删除Listbox2中全部内容
方法1: m_ListBox2.ResetContent();
方法2:循环删除,这里需要注意
int Count = m_ListBox.GetCount();
for (int i=0 ;i<=Count ;i++)
{
m_ListBox.DeleteString(i);
}
//按以上写法,程序并不能一键全部删除ListBox里面的记录,只能删除一半 , 为什么????
//换成一下写法则可完全删除:
int Count = m_ListBox.GetCount();
for (int i=Count ;i>=0 ; i--)
{
m_ListBox.DeleteString(i);
}
原因分析:
CListBox 在删除一条记录时,已经把记录数重新调整过,所以假设你成功删除了0的那条记录,那你再删除Count(没有效果,进行错误捕捉,就可以发现),因为你进行完第一步操作以后,后面的所有记录都会更新其索引值,此时最大索引值为Count-1.*/
eg5:删除多行选中记录
首先:资源编辑器中修改ListBox2的属性:Selecttion:Multiple
intnCount=m_ListBox2.GetSelCount();
if(!nCount){
AfxMessageBox(_T("请选择要删除的项目!"));
return;
}
else{
int* buffer = new int[nCount];
memset(buffer, -1, sizeof(int)*nCount);
m_ListBox2.GetSelItems(nCount, buffer);
for(int i=nCount-1; i>=0; i--) {
m_ListBox2.DeleteString(buffer[i]);
}
}
delete[]buffer;