CListCtrl操作指南:增删改查全掌握

List Control 基本操作实现代码

    //(1)InsertItem-- - 插入一个主项(行)
    //(2)DeleteItem-- - 删除一个主项(行)
    //(3)InsertColumn-- - 插入一个列
    //(4)DeleteColumn-- - 删除一个列 (索引从0开始)
    //(5)SetItemText-- - 设置子项文本
    //(6)GetItemText-- - 获得子项文本
    //(7)GetItemCount-- - 获得项目的总数(总行数目)
    //(8)SetImageList-- - 把图像列表与列表控件关联(设置列表图标需要)    

以下代码示例基于 VS MFC 的 CListCtrl 类,展示如何实现列和行的增删改查操作。假设已通过资源编辑器创建了名为 IDC_LIST1 的控件,并在对话框类中通过 DDX_Control 关联了变量 m_listCtrl

初始化列表控件
// 在 OnInitDialog() 中初始化列表样式和列头
m_listCtrl.SetExtendedStyle(LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES);

// 添加初始列
m_listCtrl.InsertColumn(0, _T("姓名"), LVCFMT_LEFT, 100);
m_listCtrl.InsertColumn(1, _T("年龄"), LVCFMT_CENTER, 80);
m_listCtrl.InsertColumn(2, _T("职业"), LVCFMT_LEFT, 120);

插入行数据
int nRow = m_listCtrl.InsertItem(0, _T("张三")); // 插入主项(行)
m_listCtrl.SetItemText(nRow, 1, _T("25"));      // 设置子项文本
m_listCtrl.SetItemText(nRow, 2, _T("工程师"));

nRow = m_listCtrl.InsertItem(1, _T("李四"));
m_listCtrl.SetItemText(nRow, 1, _T("30"));
m_listCtrl.SetItemText(nRow, 2, _T("设计师"));

删除指定行
int nSelected = m_listCtrl.GetNextItem(-1, LVNI_SELECTED);
if (nSelected != -1) {
    m_listCtrl.DeleteItem(nSelected); // 根据索引删除行
}

插入新列
int nColCount = m_listCtrl.GetHeaderCtrl()->GetItemCount();
m_listCtrl.InsertColumn(nColCount, _T("薪资"), LVCFMT_RIGHT, 100);

删除指定列
if (m_listCtrl.GetHeaderCtrl()->GetItemCount() > 0) {
    m_listCtrl.DeleteColumn(0); // 删除索引为0的列
}

获取单元格文本
CString strText = m_listCtrl.GetItemText(0, 1); // 获取第0行第1列文本
AfxMessageBox(strText);

获取总行数
int nTotalItems = m_listCtrl.GetItemCount();
CString strMsg;
strMsg.Format(_T("总行数: %d"), nTotalItems);
AfxMessageBox(strMsg);

设置图像列表
// 创建图像列表(需提前准备图标资源)
CImageList m_imageList;
m_imageList.Create(16, 16, ILC_COLOR32, 2, 2);
m_imageList.Add(AfxGetApp()->LoadIcon(IDI_ICON1));
m_imageList.Add(AfxGetApp()->LoadIcon(IDI_ICON2));

// 关联图像列表
m_listCtrl.SetImageList(&m_imageList, LVSIL_SMALL);

// 使用带图标的插入
m_listCtrl.InsertItem(0, _T("带图标项"), 0); // 第三个参数为图标索引

注意事项

  1. 列索引从0开始计数,操作前应通过GetHeaderCtrl()->GetItemCount()检查列数
  2. 删除行时应先检查GetNextItem(-1, LVNI_SELECTED)返回值避免越界
  3. 图像列表对象需保持生命周期,通常声明为类成员变量
  4. 大量数据操作时建议使用SetRedraw(FALSE)暂停重绘,操作完成后SetRedraw(TRUE)

以上代码需根据实际项目需求调整参数和错误处理逻辑。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值