分享

请问把一个对话框中的内容如何保存在另一个对话框中的列表控件中??

 行走在理想边缘 2014-05-13
我现在建立了一个基于对话框的MFC,在这个对话框中有一个列表控件,现在我想修改选中的列表控件中的内容,所以做了一个按钮,当点选这个按钮的时候会弹出的另一个对话框,在这个对话框中,我已经将选中的列表控件中一行的内容,我就是想把弹出的这个对话框的内容修改了再保存在列表控件的那一行,但是我做的实现不了,代码如下
 CAutotestDlg  ListC;
POSITION pos = ListC.m_item_list.GetFirstSelectedItemPosition();
CString msg;
msg.Format("%d",pos);
AfxMessageBox(msg);
if(pos != NULL) 
{
int Index = ListC.m_item_list.GetNextSelectedItem(pos);
ListC.m_item_list.SetItemText(Index,0,m_item_name);
ListC.m_item_list.SetItemText(Index,1,m_path);
ListC.m_item_list.SetItemText(Index,2,m_para);
ListC.m_item_list.SetItemText(Index,3,m_min_time);
ListC.m_item_list.SetItemText(Index,4,m_max_time);
UpdateData(FALSE);

}
回复次数:12
zhoujie20153
zhoujie20153
zhoujie20153
等级:Blank
#1 得分:0 回复于: 2006-07-29 11:36:50
你可以用自定义消息去实现
jeapvan
jeapvan
jeapvan
等级:Blank
#2 得分:0 回复于: 2006-07-29 11:45:42
请说的具体点好吗?我现在是搞不懂错在哪里了>?
zhoujie20153
zhoujie20153
zhoujie20153
等级:Blank
#3 得分:5 回复于: 2006-07-29 11:46:51
#incldue "AutotestDlg";

你把修改后的值传回主窗体再设置看
CAutotestDlg dlg;
if (IDOK == dlg.DoModal())
{
   m_item_list.SetItemText(Index,0,dlg.m_item_name);
   m_item_list.SetItemText(Index,1,dlg.m_path);
   m_item_list.SetItemText(Index,2,dlg.m_para);
   m_item_list.SetItemText(Index,3,dlg.m_min_time);
   m_item_list.SetItemText(Index,4,dlg.m_max_time);
    
}
jeapvan
jeapvan
jeapvan
等级:Blank
#4 得分:0 回复于: 2006-07-29 11:55:38
CAutotestDlg  ListC;
这个就是主窗口的,我就是想把他传回主窗口的??
zhoujie20153
zhoujie20153
zhoujie20153
等级:Blank
#5 得分:0 回复于: 2006-07-29 12:01:19
那你把上面的CAutotestDlg换成你的弹出窗体试下
SoLike
SoLike
思危
等级:Blank
2
#6 得分:15 回复于: 2006-07-29 12:23:05
你写的代码 是在 弹出子对话框的 保存代码吗?
如果是,那么
方法1:给弹出对话框定义一个指向主对话框的指针,将主对话框的指针在创建弹出对话框是传递给过去。

CListContronl& list = m_pParentDlg->m_item_list;   // m_pParentDlg是主对话框指针。
POSITION pos = list.GetFirstSelectedItemPosition();
CString msg;
msg.Format("%d",pos);
AfxMessageBox(msg);
if(pos != NULL)
{
int Index = list.GetNextSelectedItem(pos);
list.SetItemText(Index,0,m_item_name);
list.SetItemText(Index,1,m_path);
list.SetItemText(Index,2,m_para);
list.SetItemText(Index,3,m_min_time);
list.SetItemText(Index,4,m_max_time);
UpdateData(FALSE);

}
SoLike
SoLike
思危
等级:Blank
2
#7 得分:0 回复于: 2006-07-29 12:29:01
上面CListControl应为CListCtrl,写错了,  而且UpdateData没有用

方法2:如果你在创建时指定主对话框为弹出对话框的父对话框的话,那么直接得到主对话框的列表控件,修改之。

CListCtrl* pList = (CListCtrl*)GetParent()->GetDlgItem(IDC_MYLIST); // IDC_MYLIST是主对话框中列表控件的ID
POSITION pos = pList->GetFirstSelectedItemPosition();
CString msg;
msg.Format("%d",pos);
AfxMessageBox(msg);
if(pos != NULL)
{
int Index = pList->GetNextSelectedItem(pos);
pList->SetItemText(Index,0,m_item_name);
pList->SetItemText(Index,1,m_path);
pList->SetItemText(Index,2,m_para);
pList->SetItemText(Index,3,m_min_time);
pList->SetItemText(Index,4,m_max_time);
}
jeapvan
jeapvan
jeapvan
等级:Blank
#8 得分:0 回复于: 2006-07-29 14:06:51
那个我试了都不对呀,这两个对话框只是修改的对话框是在主对话框上面的一个按钮弹出的,我并没有设什么主次,这样的怎么改呀,我现在按上面的做都不对呀??
SoLike
SoLike
思危
等级:Blank
2
#9 得分:0 回复于: 2006-07-29 14:10:49
用方法1,将列表控件所在对话框传给编辑的对话框。

如果还不行,我也郁闷了。
jeapvan
jeapvan
jeapvan
等级:Blank
#10 得分:0 回复于: 2006-07-29 14:41:53
我是实现了把列表控件中的信息传到修改的对话框了,现在实现不了的是修改对话框中(修改后的)内容保存不到列表框里,看一下新的方法:这个在主对话框点选修改按钮写的代码,看看怎么实现
void CAutotestDlg::OnItemModify() 
{
// TODO: Add your control notification handler code here
CModifyDlg  ModifyForm;
POSITION pos = m_item_list.GetFirstSelectedItemPosition();
if(pos != NULL) 
{
int index = m_item_list.GetNextSelectedItem(pos);
ModifyForm.m_item_name = m_item_list.GetItemText(index,0);
ModifyForm.m_path = m_item_list.GetItemText(index,1);
ModifyForm.m_para = m_item_list.GetItemText(index,2);
ModifyForm.m_min_time = m_item_list.GetItemText(index,3);
ModifyForm.m_max_time = m_item_list.GetItemText(index,4);
if(ModifyForm.DoModal() == IDOK)
{
int index = m_item_list.GetNextSelectedItem(pos);
m_item_list.SetItemText(index,0,ModifyForm.m_item_name);
m_item_list.SetItemText(index,1,ModifyForm.m_path);
m_item_list.SetItemText(index,2,ModifyForm.m_para);
m_item_list.SetItemText(index,3,ModifyForm.m_min_time);
m_item_list.SetItemText(index,4,ModifyForm.m_max_time);

}

}

//UpdateData(false);
}
jeapvan
jeapvan
jeapvan
等级:Blank
#11 得分:0 回复于: 2006-07-29 14:42:42
请大家帮忙看一下??
jeapvan
jeapvan
jeapvan
等级:Blank
#12 得分:0 回复于: 2006-07-29 14:57:10
已经做出来了,谢谢大家了(代码如下)
void CAutotestDlg::OnItemModify() 
{
// TODO: Add your control notification handler code here
CModifyDlg  ModifyForm;
POSITION pos = m_item_list.GetFirstSelectedItemPosition();
if(pos != NULL) 
{
int index = m_item_list.GetNextSelectedItem(pos);
ModifyForm.m_item_name = m_item_list.GetItemText(index,0);
ModifyForm.m_path = m_item_list.GetItemText(index,1);
ModifyForm.m_para = m_item_list.GetItemText(index,2);
ModifyForm.m_min_time = m_item_list.GetItemText(index,3);
ModifyForm.m_max_time = m_item_list.GetItemText(index,4);
if(ModifyForm.DoModal() == IDOK)
{
                 POSITION pos = m_item_list.GetFirstSelectedItemPosition();
if(pos != NULL) 
{

int index = m_item_list.GetNextSelectedItem(pos);
m_item_list.SetItemText(index,0,ModifyForm.m_item_name);
m_item_list.SetItemText(index,1,ModifyForm.m_path);
m_item_list.SetItemText(index,2,ModifyForm.m_para);
m_item_list.SetItemText(index,3,ModifyForm.m_min_time);
m_item_list.SetItemText(index,4,ModifyForm.m_max_time);
            }

}

}

//UpdateData(false);
}

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多