各位大侠,帮帮忙啊,我是个菜菜菜鸟!我建了以个MFC的对话框A,在A上添加了以个BUTTON 按钮和一个Tab Control 控件,tab control 调用了三个对话框作为子页面,已经可以了,现在问题是:在其中的3个子页面里分别加了一个EDIT 控件,现在想通过A 上的button按钮保存三个Edit 的值,怎么获取这几个值啊???

解决方案 »

  1.   

    在A里面保存三个tab页面的指针,在A的button响应里面直接用三个tab页面的指针获得三个Edit的值
      

  2.   


    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(...);
        }
    }
      

  3.   

    通过Tab中转,Tab传递给子对话框,子对话框传递给上面的Edit控件
      

  4.   

    楼上的大哥,我按照你的方法做了编译没问题,但是我一执行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 时发生访问冲突  中断还是继续?怎么回事啊 ???
      

  5.   

    拿你三个对话框中的一个做例子假设这个对话框叫Dialog1,里面EDIT控件的相关变量是m_edit_11.参数初始化(先把参数关联上,在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里。
      

  6.   


    赋值? 怎么赋值?我是在按你的方法定义看指针,然后就是指针取变量的内容!请你再赐教啊,就是每个页面一个EDIT 就是要取这三个EDIT里面的 值,通过一个按钮把三个值保存起来 。我这个问题还是没解决啊!急!
      

  7.   

    number=Dialog1::m_edit_1; 这句好像有问题吧 ,编译不过啊!还有你在第二步里面  2.响应函数(在Dialog1.cpp下)void Dialog1::OnOK()  
    {
    // TODO: Add extra validation here
    UpdateData(true);CDialog::OnOK();
    }
    不明白你放在这干嘛? 所有子页面里的值我都是需要在对话框上的一个按钮BUTTON上取得并保存起来!大哥 能不能再指教下,小弟真的是很菜!
      

  8.   

    number需要定义的,你定义了么?
    另外我后面那个就是提醒你需要UpdateData来给EDIT里的内容更新和赋值
    你输入之后直接这样更新一下也行,但是必须要有这一步。
      

  9.   

    有定义啊。更新也有啊!我的做法代码请看下!
    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里面的值可以在一个按钮下同时保存下来,如果在每一个子页面里面设个按钮保存,这个很很麻烦,很多子页面的!  请大侠多指点下小弟啊!!
      

  10.   

    我的问题说白了就是在一个对话框上的一个按钮 保存其他三个对话框里面 edit 的数值 ,请各位路过的大侠多指教下!!