> 文档中心 > VC6.0 MFC 列表框 列表控件 添加 修改 删除

VC6.0 MFC 列表框 列表控件 添加 修改 删除


VC6.0 MFC 列表框 列表控件 添加 修改 删除

写在前面:列表框是很常用,并且很重要的一个控件,那么接下来,就跟随我的脚步,去探索它的奥秘吧!

一、未卜先知

1、编译运行后,点击“学生档案信息”,界面如下图所示
在这里插入图片描述
在这里插入图片描述
2、添加记录,如下图所示。
在这里插入图片描述
3、修改记录,如下图所示。
在这里插入图片描述
4、删除记录,如下图所示。
在这里插入图片描述
二、实现步骤

1、新建一个工程,如下图所示。
在这里插入图片描述
在这里插入图片描述
2、建立菜单,并给菜单做一个消息响应函数,如下图所示。
在这里插入图片描述
在这里插入图片描述
3、接下来在对话框中进行相应操作,具体步骤如下图所示。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
4、建立类向导,取类名“CDlgStuInfo”,如下图所示。
在这里插入图片描述
5、接下来,我们通过编程添加一些数据。首先在CdlgStuInfo中右击添加消息响应句柄,如下图所示。
在这里插入图片描述
6、在OnInitDialog() 中添加代码,如下。

BOOL CDlgStuInfo::OnInitDialog() {CDialog::OnInitDialog();// TODO: Add extra initialization hereDWORD dwStyle;dwStyle = m_listCtrl.GetExtendedStyle();dwStyle |= LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES  | LVS_EX_ONECLICKACTIVATE;m_listCtrl.SetExtendedStyle(dwStyle);return TRUE;  // return TRUE unless you set the focus to a control// EXCEPTION: OCX Property Pages should return FALSE}

记得要把头文件:#include "DlgStuInfo.h"对话框类嵌入进去!

7、在OnMStuInfo()中添加代码,如下。

void CChapterView::OnMStuInfo() {// TODO: Add your command handler code hereCDlgStuInfo dlg_stuInfo;dlg_stuInfo.DoModal();}

8、此时,运行结果如下图所示。
在这里插入图片描述
9、在第6步的基础上,继续往OnInitDialog() 中添加代码,如下。

BOOL CDlgStuInfo::OnInitDialog() {CDialog::OnInitDialog();// TODO: Add extra initialization hereDWORD dwStyle;dwStyle = m_listCtrl.GetExtendedStyle();dwStyle |= LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES  | LVS_EX_ONECLICKACTIVATE;m_listCtrl.SetExtendedStyle(dwStyle); //设置显示风格m_listCtrl.InsertColumn(0,"学号",LVCFMT_CENTER,100); //第一个参数是字段的编号m_listCtrl.InsertColumn(1,"姓名",LVCFMT_CENTER,100); //第二个参数是字段的名字m_listCtrl.InsertColumn(2,"性别",LVCFMT_CENTER,100); //第三个参数是字段的显示风格m_listCtrl.InsertColumn(3,"专业",LVCFMT_CENTER,100); //第四个参数是字段的宽度m_listCtrl.InsertColumn(4,"班级",LVCFMT_CENTER,100); //设置表格字段名m_listCtrl.InsertItem(0,"0001"); //0即表格中的第一行m_listCtrl.SetItemText(0,1,"张三");m_listCtrl.SetItemText(0,2,"男");m_listCtrl.SetItemText(0,3,"电子信息");m_listCtrl.SetItemText(0,4,"202001"); //在表格中添加数据,插入一行记录m_listCtrl.InsertItem(1,"0002");m_listCtrl.SetItemText(1,1,"李丽");m_listCtrl.SetItemText(1,2,"女");m_listCtrl.SetItemText(1,3,"计算机");m_listCtrl.SetItemText(1,4,"202002");return TRUE;  // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE}

10、新建一个对话框,具体如下图所示。
在这里插入图片描述
在这里插入图片描述
11、紧接着建立它所对应的类,如下图所示。
在这里插入图片描述
12、双击“添加记录”按钮,把“添加一条学生记录信息”这个对话框给调出来,如下图所示。
在这里插入图片描述
13、把“添加一条学生记录信息”对话框的头文件:#include "Dlg_StuInfoAppe.h"嵌入进来。然后在OnBTNAppe()中编程。

void CDlgStuInfo::OnBTNAppe() {// TODO: Add your control notification handler code hereCDlg_StuInfoAppe dlg_stuInfoAppe;dlg_stuInfoAppe.DoModal();}

14、接下来怎么把一条新的学生信息通过“添加一条学生记录信息”对话框加到上一个 “学生档案信息”对话框的列表中去,这是我们的目的。

15、在对应部分添加如下代码:
CString m_sNo,m_sName,m_sSex,m_sDept,m_sClass;
在这里插入图片描述

class CDlgStuInfo : public CDialog{// Constructionpublic:CDlgStuInfo(CWnd* pParent = NULL);   // standard constructor// Dialog Data//{{AFX_DATA(CDlgStuInfo)enum { IDD = IDD_DlgStuInfo };CListCtrlm_listCtrl;//}}AFX_DATACString m_sNo,m_sName,m_sSex,m_sDept,m_sClass;int m_listSelPos; //获取当前被选中的位置// Overrides// ClassWizard generated virtual function overrides//{{AFX_VIRTUAL(CDlgStuInfo)protected:virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support//}}AFX_VIRTUAL// Implementationprotected:// Generated message map functions//{{AFX_MSG(CDlgStuInfo)virtual BOOL OnInitDialog();afx_msg void OnBTNAppe();afx_msg void OnBTNModi();afx_msg void OnClickList1(NMHDR* pNMHDR, LRESULT* pResult);afx_msg void OnBTNDele();//}}AFX_MSGDECLARE_MESSAGE_MAP()};

16、点击“确定”按钮后接收添加的信息到上一个 (学生档案信息)对话框的列表中去,代码如下。

void CDlgStuInfo::OnBTNAppe() {// TODO: Add your control notification handler code hereCDlg_StuInfoAppe dlg_stuInfoAppe;if(IDOK == dlg_stuInfoAppe.DoModal()){m_sNo = dlg_stuInfoAppe.m_sNo;m_sName = dlg_stuInfoAppe.m_sName;m_sSex = dlg_stuInfoAppe.m_sSex;m_sDept = dlg_stuInfoAppe.m_sDept;m_sClass = dlg_stuInfoAppe.m_sClass; //把添加记录对话框中的数据传过来,保存到基础信息对话框中int pos; //添加的位置pos = m_listCtrl.GetItemCount();m_listCtrl.InsertItem(pos,m_sNo);m_listCtrl.SetItemText(pos,1,m_sName);m_listCtrl.SetItemText(pos,2,m_sSex);m_listCtrl.SetItemText(pos,3,m_sDept);m_listCtrl.SetItemText(pos,4,m_sClass); //把获取进来的数据插进去}}

17、双击“修改记录”按钮,把“修改记录信息”这个对话框给调出来(同12)。

18、把“修改记录信息”对话框的头文件:#include "Dlg_StuInfoModi.h"嵌入进来。然后在OnBTNModi()中编程(同13)。

void CDlgStuInfo::OnBTNModi() {// TODO: Add your control notification handler code hereCDlg_StuInfoModi dlg_stuInfoModi;    dlg_stuInfoModi.DoModal();}

19、接下来怎么把 “修改记录信息”对话框中要修改的记录更新到上一个 “学生档案信息”对话框的列表中去,这是我们的目的(同14)。

20、我们回到IDD_DlgStuInfo对话框,选中对话框,右击选择“事件…”,在弹出的事件句柄中选择“NM_CLICK”,如下图所示。
在这里插入图片描述
在这里插入图片描述

void CDlgStuInfo::OnClickList1(NMHDR* pNMHDR, LRESULT* pResult) {// TODO: Add your control notification handler code herem_listSelPos = m_listCtrl.GetSelectionMark();//获取当前被选行的信息,传送到编辑对话框中去*pResult = 0;}

21、添加代码如下(类似16)。

void CDlgStuInfo::OnBTNModi() {// TODO: Add your control notification handler code hereCDlg_StuInfoModi dlg_stuInfoModi;dlg_stuInfoModi.m_sNo = m_listCtrl.GetItemText(m_listSelPos,0); //获取当前记录的显示的文本dlg_stuInfoModi.m_sName = m_listCtrl.GetItemText(m_listSelPos,1);dlg_stuInfoModi.m_sSex = m_listCtrl.GetItemText(m_listSelPos,2);dlg_stuInfoModi.m_sDept = m_listCtrl.GetItemText(m_listSelPos,3);dlg_stuInfoModi.m_sClass = m_listCtrl.GetItemText(m_listSelPos,4);if(IDOK == dlg_stuInfoModi.DoModal()){ //把新数据传送给浏览对话框,实现信息的修改UpdateData(true); //把对话框中的信息更新到内存中去m_listCtrl.SetItemText(m_listSelPos,0,dlg_stuInfoModi.m_sNo);m_listCtrl.SetItemText(m_listSelPos,1,dlg_stuInfoModi.m_sName);m_listCtrl.SetItemText(m_listSelPos,2,dlg_stuInfoModi.m_sSex);m_listCtrl.SetItemText(m_listSelPos,3,dlg_stuInfoModi.m_sDept);m_listCtrl.SetItemText(m_listSelPos,4,dlg_stuInfoModi.m_sClass);}}

22、“删除记录”类似,不再叙述。这里仅将该部分代码附上,如下。

void CDlgStuInfo::OnBTNDele() {// TODO: Add your control notification handler code hereCString str;str.Format("确认删除第 %d 行",m_listSelPos + 1);if(IDYES == AfxMessageBox(str,MB_YESNO|MB_ICONQUESTION)){m_listCtrl.DeleteItem(m_listSelPos);}} 

三、执行结果

1、编译运行后,点击“学生档案信息”,界面如下图所示。
在这里插入图片描述
在这里插入图片描述
2、添加记录,如下图所示。
在这里插入图片描述
3、修改记录,如下图所示。
在这里插入图片描述
4、删除记录,如下图所示。
在这里插入图片描述