24小时热门版块排行榜    

CyRhmU.jpeg
查看: 865  |  回复: 5

wyq0901

铁杆木虫 (小有名气)


[交流] 【求助】CListCtrl列表框中数据保存,读取问题?(楼主取消)

基于对话框建立的工程,里面包含多个对话框。
在其中一个对话框上添加CListCtrl列表框,列表框有5列,内容通过CEdit框输入获得;
添加多行数据后,要保存添加的这些数据(不是保存到硬盘上);以便后面使用这些数据。
在另一个对话框中添加下拉控件,里面的内容是上面列表框中的第2列,相当于动态添加的。
问:如何保存和读取这样的数据?

有一个想法:定义一个结构体,把数据都存放在结构体里面,下拉控件到这个结构体里面找所需要的列数据。
不知道是否可以,主要是不会编程,希望给出具体代码。

[ Last edited by ben_ladeng on 2011-3-25 at 14:14 ]
回复此楼

» 猜你喜欢

» 本主题相关价值贴推荐,对您同样有帮助:

» 抢金币啦!回帖就可以得到:

查看全部散金贴

已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

wyq0901

铁杆木虫 (小有名气)


我写一下,帮我找找错误吧!
基于Dialog建立工程:
包括三个对话框:IDD_DIALOG_MAIN,IDD_DIALOG_PRODUCT,IDD_DIALOG_METHOD
它们分别对应三个对话框类:CMainDlg,CProductDlg和CMethodDlg
在IDD_DIALOG_MAIN中添加两个按钮,分别调用另外两个对话框;
在IDD_DIALOG_PRODUCT中添加5个CEdit Box,用于输入数据,添加Add按钮,CListCtrl列表框用于显示,再添加一个Save按钮。
在IDD_DIALOG_METHOD中添加Combo Box,用于获得列表中的某一列。
CEdit Box向CListCtrl列表框中添加数据已经实现,这里忽略。主要研究怎么保存CListCtrl列表框中的数据,在其他对话框能继续使用。

首先,在mainDlg.h中定义一个结构体如下:
public:
typedef struct PartDefinition
{
CString PartID;
CString PartName;
CString GivenName;
CString AF;
CString Type;
}ProductInfo;
ProductInfo *productinfo;

在ProductDlg.cpp中包含头文件mainDlg.h,并双击Save按钮,添加如下代码:

void CProductDlg::OnButtonSave()  
{
// TODO: Add your control notification handler code here

int nItemCount=m_listDisp.GetItemCount();//表项总数   
for(int i=0;i {
//按行读取数据
CMainDlg *pMDlg=(CMainDlg *)AfxGetMainWnd();
pMDlg->productinfo->PartID = m_listDisp.GetItemText(i,0);
pMDlg->productinfo->PartName = m_listDisp.GetItemText(i,1);
pMDlg->productinfo->GivenName = m_listDisp.GetItemText(i,2);
pMDlg->productinfo->AF = m_listDisp.GetItemText(i,3);
pMDlg->productinfo->Type = m_listDisp.GetItemText(i,4);
}
这样,关闭IDD_DIALOG_PRODUCT对话框后,数据保存到结构体中了吗?编译没有问题,运行有问题!!!

再到IDD_DIALOG_METHOD中,在MethodDlg.cpp中包含头文件mainDlg.h,双击Combo Box控件,添加如下代码:
void CMethodDlg::OnEditchangeComboPartselection1()  
{
// TODO: Add your control notification handler code here
CMainDlg *pMDlg=(CMainDlg *)AfxGetMainWnd();
((CComboBox *)GetDlgItem(IDC_COMBO_PARTSELECTION1))->InsertString =  
pMDlg->productinfo->GivenName;
}
这样能使下拉列表中添加GivenName,也就是CListCtrl列表框中第三列的值吗???
2楼2011-03-09 14:49:05
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

claudebell

银虫 (小有名气)


wyq0901(金币+5): 感谢回复,劳驾进一步解释一下,现在问题就是编译没问题,运行一点击save按钮就弹出警告的对话框,不能继续下去,打开的对话框全都强制关闭了。 2011-03-18 14:42:45
这个...没有插入代码看的好眼晕...
大致看了一下,思路貌似没错。
只要保证productinfo是个全局变量就可以,这样ProductDlg对productinfo修改后,其中的值会发生变化,ProductDlg关闭后,productinfo的值也不会销毁,其他对话框依然可以调用。
至于为什么运行出问题,楼主可以单步跟踪一下。
3楼2011-03-11 11:59:32
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

wyq0901

铁杆木虫 (小有名气)


有没有人再给点意见啊?调不出来了
4楼2011-03-16 21:13:19
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

wyq0901

铁杆木虫 (小有名气)


引用回帖:
Originally posted by claudebell at 2011-03-11 11:59:32:
这个...没有插入代码看的好眼晕...
大致看了一下,思路貌似没错。
只要保证productinfo是个全局变量就可以,这样ProductDlg对productinfo修改后,其中的值会发生变化,ProductDlg关闭后,productinfo的值也不会 ...

像我这样在mainDlg.h中定义的productinfo属于全局变量了?如下:
mainDlg.h中定义一个结构体如下:
public:
typedef struct PartDefinition
{
CString PartID;
CString PartName;
CString GivenName;
CString AF;
CString Type;
}ProductInfo;
ProductInfo *productinfo;
我有点糊涂,因为是根据对话框建立的工程,所以怎么样判断哪个是主对话框,这个productinfo一定要做主对话框中定义成全局变量吗?
5楼2011-03-18 14:40:13
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

wyq0901

铁杆木虫 (小有名气)


找到原因了,没有给指针分配储存空间,非法调用了
问题解决,此贴可结。
6楼2011-03-25 14:03:06
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 wyq0901 的主题更新
普通表情 高级回复(可上传附件)
信息提示
请填处理意见