两个对话框之间的数据传递问题

xunxj107 2011-11-22 09:04:57
建了一个基于单文档的工程,添加了两个对话框dialog1和dialog2。dialog1里面放置了一个列表视图控件,和两个按钮,button1实现添加功能,button2实现修改功能。当点击button1按钮时,弹出dialog2,在dialog2中的编辑控件中输入相应的内容,点击确定按钮后,编辑控件中的内容自动添加到dailog1中的列表视图控件中。当点击button2按钮时,可修改列表视图控件选中的行的内容。请问该如何编程,可否给出详细程序,请高手们指点一下,我是初学者!
...全文
224 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
xunxj107 2011-11-23
  • 打赏
  • 举报
回复
在我的程序基础怎样改才可以?请给出具体程序,我不太懂!
TandyT 2011-11-23
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 xunxj107 的回复:]
BOOL Cdialog2::OnInitDialog()
{
CDialog::OnInitDialog();
Cdialog1 m_dialog;//这个是新的对象,而不是你原来生成的对话框1,别搞混淆了
UpdateData(TRUE);
GetDlgItem(IDC_EDIT1)->SetWindowText(m_dialog.str1);

return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}

[/Quote]

你要搞清楚,你在这里生成的是一个新的对话框1对象而不是原来的,这是两个不同的对话框,所以数据传递不到原来的对话框1 上面。
Eleven 2011-11-23
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 xunxj107 的回复:]
关于button2按钮的程序应该是怎样的?当点击button2按钮时,怎样把列表视图控件中,每行条目的内容自动显示在dialog2中的相应编辑控件中?请指点!
[/Quote]
你弹出的对话框中保存父窗口类的指针CWnd*或者HWND窗口句柄,或者直接是CListCtrl控件的指针或者窗口句柄
TandyT 2011-11-23
  • 打赏
  • 举报
回复
要实现数据双向传递,
方法很多,其一是用全局变量来实现数据共享,此方法简单有效;
其二是在主框架类或者主视图类啥的添加定时器,定时更新传递两个对话框的数据;

xunxj107 2011-11-23
  • 打赏
  • 举报
回复
void Cdialog1::OnButton2()
{
int nItem ;
CListCtrl* pListCtrl = (CListCtrl*)GetDlgItem(IDC_LIST1); //获得行条目(行索引)
POSITION pos = pListCtrl->GetFirstSelectedItemPosition();
nItem = pListCtrl->GetNextSelectedItem(pos);
str1=m_list.GetItemText(nItem,1); //str1、str2、str3 是Cdialog1的变量,类型是CString型的
str2=m_list.GetItemText(nItem,2); //m_list是CListCtrl变量
str3=m_list.GetItemText(nItem,3);

Cdialog2 *dlg=new Cdialog2();
dlg->Create(IDD_DIALOG2,this);//创建非模态对话框
dlg->ShowWindow(SW_SHOW);//显示
}

BOOL Cdialog2::OnInitDialog()
{
CDialog::OnInitDialog();
Cdialog1 m_dialog;
UpdateData(TRUE);
GetDlgItem(IDC_EDIT1)->SetWindowText(m_dialog.str1);

return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}

为什么,我在单击button2时,dialog1中列表视图控件的内容没有显示在dialog2中的相应编辑控件中?请各位高手指点,很是迷惑?
xunxj107 2011-11-23
  • 打赏
  • 举报
回复
关于button2按钮的程序应该是怎样的?当点击button2按钮时,怎样把列表视图控件中,每行条目的内容自动显示在dialog2中的相应编辑控件中?请指点!
Icer 2011-11-23
  • 打赏
  • 举报
回复
楼上正解,需要存到变量中使用,因为DoModal之后窗口销毁了哦,但是对象还在,所以控件不能使用了,但变量可以
if(IDOK == m_dlg1.DoModal())
{
CString str;
str=m_dlg.text;
}
疯狂-的-蜗牛 2011-11-23
  • 打赏
  • 举报
回复
在Dialog2中添加变量:CString text;
在构造函数中初始化:text="";
Dialog2中添加文本框,为文本框添加变量:m_str;
在“确定”按钮单击相应函数里:
OnMyOK()
{
UpdateData(TRUE);
text=m_str;
ShowWindow(SW_HIDE);
}
在Dialog1里面添加成员变量:
CDialog1 m_dlg1;
CString m_text;;
在OnButton1Click()
{
m_dlg1.DoModal();
CString str;
str=m_dlg.text;
if(str=="")
{
MessageBox("输入不能为空 !!!");
return;
}
m_text=str;
………………………………………………
}
其他的就好说了吧
xunxj107 2011-11-23
  • 打赏
  • 举报
回复
11楼得太好了,我的问题解决了,现在的问题是,在dialog1有一个删除按钮,当点击按钮时可以实现,列表视图控件中选中的行被删除,下面的行自动补上来,且其相应的序号也自动改变。以下是我的程序,不能实现我的功能,请问该如何改?

void Cdialog::OnButton3() //实现删除功能,但是不能实现序号的自动改变
{
// TODO: Add your control notification handler code here
CListCtrl* pListCtrl = (CListCtrl*)GetDlgItem(IDC_LIST1);
POSITION pos = pListCtrl->GetFirstSelectedItemPosition();

if (pos == NULL)
{
return;
}

int nItem;
// 在处于选中状态的行数里,从第一行循环到选中的最后一行
while (pos)
{
nItem = pListCtrl->GetNextSelectedItem(pos);
pListCtrl->DeleteItem(nItem);
pos = m_list.GetFirstSelectedItemPosition();
}

CString s1,s2,s3,s4,s5,s6,s7; //想实现序号自动改变,但是实现不了
int j;
j=m_list.GetItemCount();
for(nItem;nItem<j;nItem++)
{
s1=m_list.GetItemText((nItem+1),1);
s2=m_list.GetItemText((nItem+1),2);
s3=m_list.GetItemText((nItem+1),3);
s4=m_list.GetItemText((nItem+1),4);
s5=m_list.GetItemText((nItem+1),5);
s6=m_list.GetItemText((nItem+1),6);
s7=m_list.GetItemText((nItem+1),7);
Cdialog *pDlg=this;
CString c1;
c1=CString(nItem+48);
pDlg->m_list.InsertItem(nItem,c1);
pDlg->m_list.SetItemText(nItem,1,s1);
pDlg->m_list.SetItemText(nItem,2,s2);
pDlg->m_list.SetItemText(nItem,3,s3);
pDlg->m_list.SetItemText(nItem,4,s4);
pDlg->m_list.SetItemText(nItem,5,s5);
pDlg->m_list.SetItemText(nItem,6,s6);
pDlg->m_list.SetItemText(nItem,7,s7);
}


}
TandyT 2011-11-23
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 visualeleven 的回复:]

引用 5 楼 xunxj107 的回复:
关于button2按钮的程序应该是怎样的?当点击button2按钮时,怎样把列表视图控件中,每行条目的内容自动显示在dialog2中的相应编辑控件中?请指点!

你弹出的对话框中保存父窗口类的指针CWnd*或者HWND窗口句柄,或者直接是CListCtrl控件的指针或者窗口句柄
[/Quote]

可以用8楼的方法,或者是在用个全局变量来存储需要传递的数据,不过需要手动用UpdateData(FALSE)来更新。

实在不行,如果方便,就发工程到我邮箱 andy208208@126.com ,偶帮你改好
qingyun5198 2011-11-22
  • 打赏
  • 举报
回复
还需要包含对应对话框的头文件;
如果你把需要操作的信息存储到一些全局变量里就可以了,这样更简单些
  • 打赏
  • 举报
回复
都是些基础性操作 把编辑控件与变量绑定 ....

15,980

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧