MFC ListControl表格编辑()

3 篇文章 0 订阅

首先在资源视图的主界面添加一个editcontrol编辑框控件

再添加主界面ListControl表格控件

类似这样:

再设置listcontrol表格控件的属性和editcontrol编辑框属性

在.h的头文件里面定义CListCtrl m_list;  CEdit m_edit;

CListCtrl m_list;
CEdit m_edit;

将表格控件listcontrol、编辑框editcontrol控件和控件ID关联起来

DDX_Control(pDX, IDC_EDIT_LIST, m_edit);
DDX_Control(pDX, IDC_LIST, m_list);
//双击编辑表格
void COptical_fiber_polishingDlg::OnDblclkList(NMHDR *pNMHDR, LRESULT *pResult)
{
	LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast<LPNMITEMACTIVATE>(pNMHDR);
	// TODO: 在此添加控件通知处理程序代码

	NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
	CRect rc;

	m_Row = pNMListView->iItem;//获得选中的行
	m_Col = pNMListView->iSubItem;//获得选中列

	if (pNMListView->iSubItem == 0 || pNMListView->iSubItem == 4) //如果选择的是子项;
	{

	}
	else
	{
		m_list.GetSubItemRect(m_Row, m_Col, LVIR_LABEL, rc);//获得子项的RECT;
		m_edit.SetParent(&m_list);//转换坐标为列表框中的坐标
		m_edit.MoveWindow(rc);//移动Edit到RECT坐在的位置;
		m_edit.SetWindowText(m_list.GetItemText(m_Row, m_Col));//将该子项中的值放在Edit控件中;
		m_edit.ShowWindow(SW_SHOW);//显示Edit控件;
		m_edit.SetFocus();//设置Edit焦点
		m_edit.ShowCaret();//显示光标
		m_edit.SetSel(-1);//将光标移动到最后
	}
	*pResult = 0;
}

void COptical_fiber_polishingDlg::OnKillfocusEditList()
{
	// TODO: 在此添加控件通知处理程序代码

	CString str;
	m_edit.GetWindowText(str);    //得到用户输入的新的内容
	m_list.SetItemText(m_Row, m_Col, str);   //设置编辑框的新内容
	m_edit.ShowWindow(SW_HIDE);                //应藏编辑框
}
//表添加行
void COptical_fiber_polishingDlg::OnBnClickedAdd()
{
	// TODO: 在此添加控件通知处理程序代码


	// TODO: 在此添加控件通知处理程序代码
	// 在列表视图控件中插入列表项,并设置列表子项文本   
	int i = m_list.GetItemCount();

	if (i == 0) {
		m_list.InsertItem(0, L"1");
		m_list.SetItemText(0, 1, L"");
		m_list.SetItemText(0, 2, L"");
		m_list.SetItemText(0, 3, L"");

	}
	else
	{
		int i2 = i + 1;
		CString str;
		str.Format(L"%d", i2);
		m_list.InsertItem(i, (LPCTSTR)str);
		m_list.SetItemText(i, 1, L"");
		m_list.SetItemText(i, 2, L"");
		m_list.SetItemText(i, 3, L"");

	}
}

//表删除行
void COptical_fiber_polishingDlg::OnBnClickedDelete()
{
	// TODO: 在此添加控件通知处理程序代码
	int nItem = m_list.GetSelectionMark();
	if (nItem != -1)
	{
		int result = MessageBox(L"确认删除当前选中行的数据?", L"温馨提示",MB_YESNO | MB_ICONINFORMATION);//弹窗提示
		switch (result) {
		case IDYES:
		{//点击YES按钮的具体实现功能
			m_list.DeleteItem(nItem);
			break;
		}
		case IDNO:
			break;
		}
	}
	else {
		AfxMessageBox(L"请选择要删除的行!");
	}

}

 

  • 6
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

西伯利亚大橘猫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值