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 here
	DWORD 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 here
	CDlgStuInfo dlg_stuInfo;
	dlg_stuInfo.DoModal();
}

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

BOOL CDlgStuInfo::OnInitDialog() 
{
    
    
	CDialog::OnInitDialog();
	// TODO: Add extra initialization here
	DWORD 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 here
	CDlg_StuInfoAppe dlg_stuInfoAppe;
	dlg_stuInfoAppe.DoModal();
}

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

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

class CDlgStuInfo : public CDialog
{
    
    
// Construction
public:
	CDlgStuInfo(CWnd* pParent = NULL);   // standard constructor

// Dialog Data
	//{
    
    {AFX_DATA(CDlgStuInfo)
	enum {
    
     IDD = IDD_DlgStuInfo };
	CListCtrl	m_listCtrl;
	//}}AFX_DATA

	CString 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

// Implementation
protected:

	// 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_MSG
	DECLARE_MESSAGE_MAP()
};

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

扫描二维码关注公众号,回复: 14755594 查看本文章
void CDlgStuInfo::OnBTNAppe() 
{
    
    
	// TODO: Add your control notification handler code here
	CDlg_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 here
	CDlg_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 here
	m_listSelPos = m_listCtrl.GetSelectionMark();
//获取当前被选行的信息,传送到编辑对话框中去
	*pResult = 0;
}

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

void CDlgStuInfo::OnBTNModi() 
{
    
    
	// TODO: Add your control notification handler code here
	CDlg_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 here
	CString str;
	str.Format("确认删除第 %d 行",m_listSelPos + 1);
	if(IDYES == AfxMessageBox(str,MB_YESNO|MB_ICONQUESTION))
	{
    
    
		m_listCtrl.DeleteItem(m_listSelPos);
	}
} 

三、执行结果

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

猜你喜欢

转载自blog.csdn.net/qq_46649692/article/details/106999936
今日推荐