怎么获得不同对话框里面控件的变量的值?急!!!

Metrosexual 2010-10-14 03:33:36
各位大侠,帮帮忙啊,我是个菜菜菜鸟!

我建了以个MFC的对话框A,在A上添加了以个BUTTON 按钮和一个Tab Control 控件,tab control 调用了三个对话框作为子页面,已经可以了,现在问题是:在其中的3个子页面里分别加了一个EDIT 控件,现在想通过A 上的button按钮保存三个Edit 的值,怎么获取这几个值啊???
...全文
223 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
Metrosexual 2010-10-15
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 visualwind 的回复:]
引用 9 楼 eamoon2008 的回复:

引用 6 楼 visualwind 的回复:

你的子页面的3个指针有没有正确赋值?


赋值? 怎么赋值?

我是在按你的方法定义看指针,然后就是指针取变量的内容!

请你再赐教啊,就是每个页面一个EDIT 就是要取这三个EDIT里面的 值,通过一个按钮把三个值保存起来 。我这个问题还是没解决啊!急!


指针不赋值是无……
[/Quote]

大哥非常非常非常非常非常.....感谢你!! 谢谢楼上的各位!! 问题解决了! 把对象赋给指针。 小弟谢谢你们!! 可以结贴了!
visualwind 2010-10-15
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 eamoon2008 的回复:]

引用 6 楼 visualwind 的回复:

你的子页面的3个指针有没有正确赋值?


赋值? 怎么赋值?

我是在按你的方法定义看指针,然后就是指针取变量的内容!

请你再赐教啊,就是每个页面一个EDIT 就是要取这三个EDIT里面的 值,通过一个按钮把三个值保存起来 。我这个问题还是没解决啊!急!
[/Quote]

指针不赋值是无效的。
你把子页面对象取地址赋给这3个指针啊
Metrosexual 2010-10-15
  • 打赏
  • 举报
回复
我的问题说白了就是在一个对话框上的一个按钮 保存其他三个对话框里面 edit 的数值 ,请各位路过的大侠多指教下!!
Metrosexual 2010-10-15
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 martenyong 的回复:]
引用 10 楼 eamoon2008 的回复:
引用 8 楼 martenyong 的回复:


number=Dialog1::m_edit_1; 这句好像有问题吧 ,编译不过啊!

还有你在第二步里面 2.响应函数(在Dialog1.cpp下)

void Dialog1::OnOK()
{
// TODO: Add extra validation here
Updat……
[/Quote]
有定义啊。更新也有啊!

我的做法代码请看下!
void CProduct_set::OnBnClickedButton1()//CProduct_set是对话框A的类
{
// TODO: 在此添加控件通知处理程序代码
UpdateData(true);
CString FileName( "./test.ini ");
CString yy ;
cp1->GetDlgItem(IDC_EDIT1)->GetWindowTextW(yy); // CP1是子页面1 的类指针
WritePrivateProfileString(_T("基本设定"),_T("X间距"),yy,FileName);
UpdateData(false);

}

#pragma once
#include "afxcmn.h"
#include "Product_p1.h"
#include "Product_p2.h"
#include "Product_p3.h"
#include "Product_p4.h"
#include "Product_p5.h"


// CProduct_set 对话框
class CProduct_set : public CDialog
{
DECLARE_DYNAMIC(CProduct_set)

public:
CProduct_set(CWnd* pParent = NULL); // 标准构造函数
virtual ~CProduct_set();

// 对话框数据
enum { IDD = IDD_Dlg_Product };

protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持

CProduct_p1 *cp1 ; // 这里定义了三个子夜面类 指针;
CProduct_p2 *cp2 ;
CProduct_p3 *cp3 ;

DECLARE_MESSAGE_MAP()
public:
afx_msg void OnTcnSelchangeTabproduct(NMHDR *pNMHDR, LRESULT *pResult);
afx_msg void OnBnClickedOk();
CTabCtrl m_tabctrl;
CProduct_p1 m_page1;
CProduct_p2 m_page2;
CProduct_p3 m_page3;
CProduct_p4 m_page4;
CProduct_p5 m_page5;


afx_msg void OnShowWindow(BOOL bShow, UINT nStatus);
afx_msg void OnBnClickedCancel();
afx_msg void OnBnClickedButton1();
};


编译没问题,但是一执行BUTTON 就出错,

如果我把程序改下:

void CProduct_set::OnBnClickedButton1()
{
// TODO: 在此添加控件通知处理程序代码
UpdateData(true);
CString FileName( "./test.ini ");
CString yy ;
CProduct_p1 as; //类1 对象
yy=as.m_x_size ; // m_x_size 是子页面1 里edit 的value 变量
WritePrivateProfileString(_T("基本设定"),_T("X间距"),yy,FileName);
UpdateData(false);
}
编译没问题也不报错,执行BUTTON 也没问题,但是得的数据时空的,YY没有返回值!

请各位大哥指点下,怎么就是不行啊?

我就是希望几个页面的edit里面的值可以在一个按钮下同时保存下来,如果在每一个子页面里面设个按钮保存,这个很很麻烦,很多子页面的!

请大侠多指点下小弟啊!!
sparrow429 2010-10-15
  • 打赏
  • 举报
回复
怎么搞的这么复杂啊
martenyong 2010-10-15
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 eamoon2008 的回复:]
引用 8 楼 martenyong 的回复:


number=Dialog1::m_edit_1; 这句好像有问题吧 ,编译不过啊!

还有你在第二步里面 2.响应函数(在Dialog1.cpp下)

void Dialog1::OnOK()
{
// TODO: Add extra validation here
UpdateData(true);

CDialog……
[/Quote]


number需要定义的,你定义了么?
另外我后面那个就是提醒你需要UpdateData来给EDIT里的内容更新和赋值
你输入之后直接这样更新一下也行,但是必须要有这一步。
Metrosexual 2010-10-15
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 martenyong 的回复:]

[/Quote]
number=Dialog1::m_edit_1; 这句好像有问题吧 ,编译不过啊!

还有你在第二步里面 2.响应函数(在Dialog1.cpp下)

void Dialog1::OnOK()
{
// TODO: Add extra validation here
UpdateData(true);

CDialog::OnOK();
}
不明白你放在这干嘛? 所有子页面里的值我都是需要在对话框上的一个按钮BUTTON上取得并保存起来!

大哥 能不能再指教下,小弟真的是很菜!
Metrosexual 2010-10-15
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 visualwind 的回复:]

你的子页面的3个指针有没有正确赋值?
[/Quote]

赋值? 怎么赋值?

我是在按你的方法定义看指针,然后就是指针取变量的内容!

请你再赐教啊,就是每个页面一个EDIT 就是要取这三个EDIT里面的 值,通过一个按钮把三个值保存起来 。我这个问题还是没解决啊!急!
martenyong 2010-10-14
  • 打赏
  • 举报
回复
拿你三个对话框中的一个做例子假设这个对话框叫Dialog1,里面EDIT控件的相关变量是m_edit_1

1.参数初始化(先把参数关联上,在Dialog1.cpp里作如下修改)

Dialog1::Dialog1(CWnd* pParent /*=NULL*/)
: CDialog(Dialog1::IDD, pParent)
{
//{{AFX_DATA_INIT(Input_Canshu)
m_edit_1 = 0;
//}}AFX_DATA_INIT
}

int Dialog1::m_edit_1 = 0;

(注意两次初始化)

2.响应函数(在Dialog1.cpp下)

void Dialog1::OnOK()
{
// TODO: Add extra validation here
UpdateData(true);

CDialog::OnOK();
}

3.定义静态变量(在Dialog1.h下修改一下即可)

static int m_edit_1;

4.传参(在A.cpp里)

void A::On(这个Tab的响应函数是什么我不知道,自己定吧,在这里改就行)()
{
// TODO: Add your command handler code here
Dialog1 Dialog1;
if(Dialog1.DoModal() == IDOK)
{
number=Dialog1::m_edit_1;
}
}

所传参数应定义与A.h的public里。
martenyong 2010-10-14
  • 打赏
  • 举报
回复
需要一些步骤才能把两个对话框里的数据达到传送目的的。
我觉得不需要用指针吧。
visualwind 2010-10-14
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 eamoon2008 的回复:]
楼上的大哥,我按照你的方法做了编译没问题,但是我一执行Button 就发生错误!

我在对话框A的 头文件中
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持

CProduct_p1 *cp1 ; //子页面 1 的类指针
CProduct_p2 *cp2 ; // 子页……
[/Quote]

你的子页面的3个指针有没有正确赋值?
Metrosexual 2010-10-14
  • 打赏
  • 举报
回复
楼上的大哥,我按照你的方法做了编译没问题,但是我一执行Button 就发生错误!

我在对话框A的 头文件中
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持

CProduct_p1 *cp1 ; //子页面 1 的类指针
CProduct_p2 *cp2 ; // 子页面 2 的类指针
CProduct_p3 *cp3 ; //子页面 3 的类指针

void CProduct_set::OnBnClickedButton1()
{
CString yy ;
cp1->GetDlgItem(IDC_EDIT1)->GetWindowTextW(yy);//IDC_EDIT1是子页面1的一个控件ID ,执行到这就报错!
}

到这就报错!
PG2000.exe 中的 0x78aaadcc (mfc90ud.dll) 处未处理的异常: 0xC0000005: 读取位置 0xccccccec 时发生访问冲突 中断还是继续?

怎么回事啊 ???
Eleven 2010-10-14
  • 打赏
  • 举报
回复
[Quote=引用楼主 eamoon2008 的回复:]
各位大侠,帮帮忙啊,我是个菜菜菜鸟!

我建了以个MFC的对话框A,在A上添加了以个BUTTON 按钮和一个Tab Control 控件,tab control 调用了三个对话框作为子页面,已经可以了,现在问题是:在其中的3个子页面里分别加了一个EDIT 控件,现在想通过A 上的button按钮保存三个Edit 的值,怎么获取这几个值啊???
[/Quote]
通过Tab中转,Tab传递给子对话框,子对话框传递给上面的Edit控件
visualwind 2010-10-14
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 eamoon2008 的回复:]

楼上的请说详细点好吗,我是个菜鸟,
具体应该怎么实现?谢谢
[/Quote]

class A : public CDialog
{
protected:
Tab Control 控件;
Tab页面1的指针;
Tab页面2的指针;
Tab页面3的指针;

void OnButton(...)
{
Tab页面1的指针->GetDlgItem(edit的ID)->GetWindowText(...);
Tab页面2的指针->GetDlgItem(edit的ID)->GetWindowText(...);
Tab页面3的指针->GetDlgItem(edit的ID)->GetWindowText(...);
}
}
Metrosexual 2010-10-14
  • 打赏
  • 举报
回复
楼上的请说详细点好吗,我是个菜鸟,
具体应该怎么实现?谢谢
visualwind 2010-10-14
  • 打赏
  • 举报
回复
在A里面保存三个tab页面的指针,在A的button响应里面直接用三个tab页面的指针获得三个Edit的值

16,551

社区成员

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

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

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