简单问题:一个模式对话框消毁后,如何将它的变量传送给其它对框??

lijins 2004-06-10 03:40:18
俺想在一个对话框(Dialog1)中弹出另一个对话框(Dialog2),在Dialog2中进行变量设置,然后把Dialog2的变量赋值给Dialog1的变量,最后关闭Dialog2。
可是我总无法得到想要的结果(即Dialog2赋值给Dialog1的变量(int)总是
-858993460),请问高手,这是啥子回事儿呀!!
...全文
172 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
lijins 2004-06-11
  • 打赏
  • 举报
回复
参考以下答案:

回复人: 5512(5512)

CDialog2 dlg;
if (dlg.DoModal()==IDOK)
{
DWORD m_Number=dlg2.m_Number;//CDialog2 类中应该将m_Number定义成public
}

回复人: woodwoodwood3() ( )

楼主出问题的原因可能是因为用了控件成员变量,Dialog2的控件成员变量当Dialog2销毁后就不能访问了。
解决的办法是另外定义一个变量:
class CDialog2
{
int m_i;//变量
}
当在Dialog2的控件输入变量值后,在窗口销毁前将值赋给,如m_i,然后如下访问:
CDialog2 dlg2;
if (dlg2.DoModal()==IDOK)
{
int iii=dlg2.m_i;//在这里取得Dialog2中变量的值,这样就不会有问题了
}

回复人: laiyiling(最熟悉的陌生人)
回复人: 5512(5512)

呵呵,谢谢各位,问题己搞定!




lijins 2004-06-11
  • 打赏
  • 举报
回复
呵呵,还是好人多呀,俺试一下!
wangtao641 2004-06-10
  • 打赏
  • 举报
回复
写错了,应该是addvalue(int in)函数
wangtao641 2004-06-10
  • 打赏
  • 举报
回复
在第二个对话框ParameterDLG中添加一个addvalue(int,int)函数。第一个对话框CDEMDlg增加dvalue变量接受第二个对话框值。

void ParameterDLG::AddValue(int lin) //
{

m_dvalue=lin;

}
void CDEMDlg::OnSelParameter()
{
// TODO: Add your control notification handler code here
ParameterDLG paradlg;
paradlg.AddValue(lin); //lin值由自己设置
if(paradlg.DoModal()==IDOK)
{
dvalue=paradlg.m_dvalues; //将lin值付给CDEMDlg成员变量

UpdateData(FALSE);
}
}




5512 2004-06-10
  • 打赏
  • 举报
回复
CDialog2 dlg;
if (dlg.DoModal()==IDOK)
{
DWORD m_Number=dlg2.m_Number;//CDialog2 类中应该将m_Number定义成public
}
woodwoodwood3 2004-06-10
  • 打赏
  • 举报
回复
楼主出问题的原因可能是因为用了控件成员变量,Dialog2的控件成员变量当Dialog2销毁后就不能访问了。
解决的办法是另外定义一个变量:
class CDialog2
{
int m_i;//变量
}
当在Dialog2的控件输入变量值后,在窗口销毁前将值赋给,如m_i,然后如下访问:
CDialog2 dlg2;
if (dlg2.DoModal()==IDOK)
{
int iii=dlg2.m_i;//在这里取得Dialog2中变量的值,这样就不会有问题了
}
sixibb 2004-06-10
  • 打赏
  • 举报
回复
全局变量占内存,而且会使结构边的混乱,不推荐使用全局变量~~
在第2个对话框的对象存在的时候,第一个对话框完全可以访问你在第二个对话框成员中存储的数据
fisker0303 2004-06-10
  • 打赏
  • 举报
回复
同意 lixiaosan(小三),用全局变量特简单。
lixiaosan 2004-06-10
  • 打赏
  • 举报
回复
也可以用全局变量
用extern声明
handsomerun 2004-06-10
  • 打赏
  • 举报
回复
在Dialog2的类里设置一个类成员变量
设置该值后,做个接口,
饭后该成员变量的值

然后在Dialog1里现实Dialog2,并且调用Dialog2的那个接口函数,获取Dialog2的那个类成员变量的值,

只要Dialog2的类对象不销毁,就没问题,

感觉讲的很罗嗦,汗自己一个

其实贴代码才素王道

上面已经有人贴了


wlbfzy 2004-06-10
  • 打赏
  • 举报
回复
在弹出的那个对话框类中自己写一个有返回值或者像传指针这样可改变值的函数。
Tuoing 2004-06-10
  • 打赏
  • 举报
回复
更正一下。你一定要在DIALOG2里定义一个变量。
CDialog2::OnOK()
{
i=20;
CDialog::OnOK();
}
在DIALOG1里可以这样调用。
CDialog1::OnDialog2()
{
CDailog1 dlg;
dlg.DoModal();
if(dlg.i==20)
{
.....
}
}
ahyf 2004-06-10
  • 打赏
  • 举报
回复
你能不能这样做,
Dialog2 中定义一个公共变量,ma.
Dialog1 中
if Dialog2.Show
DIalog1.xx = Dialog2.ma,
不用VC开发,语法记不太,
Kudeet 2004-06-10
  • 打赏
  • 举报
回复
在 CDialog2.cpp文件
# include "Dialog1.h"
CDialog1 dlg;
if(dlg.DoModal() == IDOK)
{
dlg.变量....//这里访问对话框1的变量
}
.....
Tuoing 2004-06-10
  • 打赏
  • 举报
回复
你的那个变量没有进行初始化。你一定要确定你用的哪个变量有没有在程序关闭之前给那个变量赋值
lijins 2004-06-10
  • 打赏
  • 举报
回复
郁闷!
lijins 2004-06-10
  • 打赏
  • 举报
回复
不是吧!没人回答??

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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