如何在一个对话框中使用另一个对话框中的变量

ohmygol 2011-03-10 03:29:02
我做了两个对话框 其中一个对话框设置了一个cstring的变量,m_path表示打开文件的路径,然后我想在另外一个对话框中也使用这个路径变量,并且希望值没有改变,在网上找了些方法,但是不确定只是否被改变了,请高手指导
...全文
228 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhxingway 2011-03-10
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 tandyt 的回复:]
用个全局变量吧,就是,两个对话框类都可以使用的变量,然后,第一个对话框里存储路径到这个变量,然后,在第二个对话框里读取这个变量的值,不就可以了?
[/Quote]

class Cdlg1 : public CDialog
{
public:
CString m_path;//主对话框定义全局变量
Cdlg1();
~Cdlg1();
}


class Cdlg2 : public CDialog
.
.
.
BOOL Cdlg2::OnInitDialog()
{

CString str = Cdlg1::m_path;//其它对话框直接引用.
}

楼主,也可搜索一下 "MFC 窗口传值"
天山游龙 2011-03-10
  • 打赏
  • 举报
回复
把这个变量定义成静态变量static
比如你第一个对话框为CDialog2, 则在里面定义
static CString m_strPath;
那么你在外面就可以直接使用CDialog2::m_strPath
无水先生 2011-03-10
  • 打赏
  • 举报
回复
步骤:

1)在两者之间定义对方指针,
2)只要获取对方指针(pDlg)
3)取变量 myValue = pDlg->xxxxx;

其中取指针麻烦点,需要从pDlg的父窗那里取
VC天下 2011-03-10
  • 打赏
  • 举报
回复
上面的3个方法都可以。
土土 2011-03-10
  • 打赏
  • 举报
回复
extern 变量
Dreadnought 2011-03-10
  • 打赏
  • 举报
回复
创建第二个对话框类的对象
TandyT 2011-03-10
  • 打赏
  • 举报
回复
用个全局变量吧,就是,两个对话框类都可以使用的变量,然后,第一个对话框里存储路径到这个变量,然后,在第二个对话框里读取这个变量的值,不就可以了?
副组长 2011-03-10
  • 打赏
  • 举报
回复
你没改它,它就没有改变。
ohmygol 2011-03-10
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 fighttodeath 的回复:]

你可以在创建B类的时候,把A类的对象指针给传过去,这样就可以在B类中操作A类的东西啊..
[/Quote]

怎么传,能给个代码吗?
Devil26 2011-03-10
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 wangld02 的回复:]
把这个变量定义成静态变量static
比如你第一个对话框为CDialog2, 则在里面定义
static CString m_strPath;
那么你在外面就可以直接使用CDialog2::m_strPath
[/Quote]
++
青稞 2011-03-10
  • 打赏
  • 举报
回复
你可以在创建B类的时候,把A类的对象指针给传过去,这样就可以在B类中操作A类的东西啊..
ohmygol 2011-03-10
  • 打赏
  • 举报
回复
我发现是在B类中不能操作A类的控件对象,一操作就崩溃,所以无法UpdateData(),各位高手有什么解决的办法没?
ohmygol 2011-03-10
  • 打赏
  • 举报
回复
我不管在哪个类里,一UpdateData()就崩溃
zwwjoy 2011-03-10
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 wangld02 的回复:]
A objA;
后,还必须A.Domodal();
[/Quote]
++
ntu_look 2011-03-10
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 ohmygol 的回复:]
我在B类中想得到A类m_path的值,我在B类中创建一个A类的对象
CSrting m_path_in_A;
A objA;
A.UpdateData();//一调用UpdateData()就崩溃,不调用传过来的就是初始值,而不是修改过后希望的值
m_path_in_a = objA.m_path;

为什么一调用UpdateData()就崩溃?
[/Quote]
不需要用A.UpdateData();
正解:
UpdateData(TRUE)
Cmydialog dlg;//第二个对话框类的变量
dlg.m_path_in_a =m_path;
UpdateData(FALSE)


天山游龙 2011-03-10
  • 打赏
  • 举报
回复
A objA;
后,还必须A.Domodal();
ohmygol 2011-03-10
  • 打赏
  • 举报
回复
我在B类中想得到A类m_path的值,我在B类中创建一个A类的对象
CSrting m_path_in_A;
A objA;
A.UpdateData();//一调用UpdateData()就崩溃,不调用传过来的就是初始值,而不是修改过后希望的值
m_path_in_a = objA.m_path;

为什么一调用UpdateData()就崩溃?

16,472

社区成员

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

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

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