(终于可以提问了)两对话框之间传值的问题

shegood1985 2010-07-31 06:51:07
CAddDlg dlgAdd;
if(dlgAdd.DoModal() == IDOK)
{
LData a;
a.apartment = ((CAddDlg*)AfxGetMainWnd())->m_apartment;//部门
}
这样为什么不行,应该怎么改?

我知道CAdddlg dlg;
dlg.m_apartment可以,可是不要用这种方法,因为dlg很大的情况时会影响速度
...全文
165 点赞 收藏 22
写回复
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
shegood1985 2010-08-02
[Quote=引用 21 楼 schlafenhamster 的回复:]
必须把所有子对话框要用的公共变量定义到APP。怕麻烦你就别写程序。
[/Quote]谢谢schlafenhamster的热心讲解
回复
shegood1985 2010-08-01
[Quote=引用 18 楼 schlafenhamster 的回复:]
m_apartment在APP中就不是成员变量?
[/Quote]这样太麻烦了啊,那样我要在app中定义很多变量,不可能把我要调用的所有子对话框的变量都在里面定义吧?
回复
gomypig 2010-08-01
真正安全有效的方法是在dlgAdd中设置了apartment等信息之后就用SendMessage函数通知父窗口类更新数据。
回复
schlafenhamster 2010-08-01
m_apartment在APP中就不是成员变量?
回复
shegood1985 2010-08-01
[Quote=引用 14 楼 schlafenhamster 的回复:]
不是不让用全局变量,在APP中就是全局变量,APP中不是有一个theApp吗?他就是全局变量啊。
[/Quote]我的意思是我被要求不能用全局变量,只能用成员变量来实现它
回复
shegood1985 2010-08-01
[Quote=引用 15 楼 hongya6088 的回复:]
引用:
m_apartment是一个对话框中editbox关联的变量.

Edit控件在dlgAdd.DoModal() 后就已经销毁了,定义另外一个不合控件关联的成员变量m_strEditValue,在AddDlg内部m_strEditValue=m_apartment;然后使用LData a;
a.apartment = ((CAddDlg*)AfxGetMainWnd())->m_s……
[/Quote]试过了,得到的结果是一样的,是一个很大的值,和使用
CAddDlg dlgAdd;
a.apartment = dlgAdd.m_apartment;
得到的不一样
回复
hongya6088 2010-08-01
[Quote=引用:]
m_apartment是一个对话框中editbox关联的变量.
[/Quote]
Edit控件在dlgAdd.DoModal() 后就已经销毁了,定义另外一个不合控件关联的成员变量m_strEditValue,在AddDlg内部m_strEditValue=m_apartment;然后使用LData a;
a.apartment = ((CAddDlg*)AfxGetMainWnd())->m_strEditValue;//部门
回复
schlafenhamster 2010-08-01
不是不让用全局变量,在APP中就是全局变量,APP中不是有一个theApp吗?他就是全局变量啊。
回复
shegood1985 2010-08-01
[Quote=引用 11 楼 luodx1021 的回复:]
把 m_apartment 定义到 App 类中,或者定义一个全局的 m_apartment 变量。
[/Quote]只让用结构成员变量,不让用全局变量
回复
shegood1985 2010-08-01
[Quote=引用 10 楼 schlafenhamster 的回复:]
1>在App中定义apartment
2>在对话框init是初始化editbox
2>在OK中,把editbox中改变的东西送回apartment
[/Quote]
不让用全局变量啊
回复
luodx1021 2010-08-01
把 m_apartment 定义到 App 类中,或者定义一个全局的 m_apartment 变量。
回复
schlafenhamster 2010-08-01
1>在App中定义apartment
2>在对话框init是初始化editbox
2>在OK中,把editbox中改变的东西送回apartment
回复
shegood1985 2010-08-01
[Quote=引用 8 楼 weizehua 的回复:]
引用 6 楼 shegood1985 的回复:

引用 5 楼 schlafenhamster 的回复:
对话框中editbox另搞一个关联的变量
怎么做呢?愁啊
本来
CAddDlg dlgAdd;
a.apartment = dlgAdd.m_apartment;
就可以得到,可是不能用,怕CAddDlg 里成员太多时降低效率

我不知道会不会降低效率,但是降低的效率在现在……
[/Quote]你这样想就不对了,总是要考虑到的问题,CAddDlg 类里有10000个对象,难道你为了访问其中一个就要载入10000个吗
回复
Happy0403 2010-08-01
[Quote=引用 6 楼 shegood1985 的回复:]

引用 5 楼 schlafenhamster 的回复:
对话框中editbox另搞一个关联的变量
怎么做呢?愁啊
本来
CAddDlg dlgAdd;
a.apartment = dlgAdd.m_apartment;
就可以得到,可是不能用,怕CAddDlg 里成员太多时降低效率
[/Quote]
我不知道会不会降低效率,但是降低的效率在现在这些强大的机器面前可以忽略掉。
现在不是80年代的机器了,大哥。。。
回复
Happy0403 2010-08-01
这个简单!
很多种方法:
最简单的:
定义个全局变量:
CEdit *m_apartment;
在对话框中添加消息映射(随便在哪加,我喜欢在OnShowWindow):

m_apartment = (CEdit *)GetDlgItem(ID____/* 你对话框的ID */);
//接着m_apartment就可以用了。

方法二:
CAddDlg.h里那个class CAddDlg中添加:
public:
CEdit *m_apartment;

然后到添加消息映射,同上。
接着这样访问:
dlgAdd.m_apartment ....

注意:
你弹出对话框的方法是DoModal();
所以在对话框结束之前程序会被挂起。
DoModal()后面的代码都不会得到执行,直到对话框结束。
回复
shegood1985 2010-08-01
[Quote=引用 5 楼 schlafenhamster 的回复:]
对话框中editbox另搞一个关联的变量
[/Quote]怎么做呢?愁啊
本来
CAddDlg dlgAdd;
a.apartment = dlgAdd.m_apartment;
就可以得到,可是不能用,怕CAddDlg 里成员太多时降低效率
回复
schlafenhamster 2010-08-01
对话框中editbox另搞一个关联的变量
回复
shegood1985 2010-08-01
[Quote=引用 1 楼 schlafenhamster 的回复:]
把m_apartment定义在APP中
[/Quote]
关键不能这样做,因为,m_apartment是一个对话框中editbox关联的变量
回复
shegood1985 2010-08-01
[Quote=引用 2 楼 oyljerry 的回复:]
m_apartment 要么放到App对象中,然后AfxGetApp()来获取对应的成员变量
或者作为成员变量传进去,跟你对话框大妹关系
[/Quote]
关键不能这样做,因为,m_apartment是一个对话框中editbox关联的变量
回复
schlafenhamster 2010-08-01
必须把所有子对话框要用的公共变量定义到APP。怕麻烦你就别写程序。
回复
发动态
发帖子
VC/MFC
创建于2007-09-28

1.5w+

社区成员

VC/MFC相关问题讨论
申请成为版主
社区公告
暂无公告