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

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很大的情况时会影响速度
...全文
192 22 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
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。怕麻烦你就别写程序。
加载更多回复(2)

16,548

社区成员

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

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

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