我有两个对话框类,A,B,在B中定义一CString变量CpathFile,在A的消息函数中通过FielDialog对象的GetpathName函数返回CpathFile的值,但是当到对话框A时变量CpathFile的值就丢失了,为什么?

解决方案 »

  1.   

    这样:
    class A
    {
    };class B
    {
    A* ptr;
    };
      

  2.   


    B.H
    public: CString SourceDataBaseName;
    CString DestDataBaseName;A.CPPvoid A::OnSelDestDB() 
    {
    // TODO: Add your control notification handler code here
    B CDlg;
    CFileDialog FileOp(TRUE);
    FileOp.DoModal();
    CDlg.DestDataBaseName=FileOp.GetPathName();}
    当在B.CPP中调用DestDataBaseName时,为空??
      

  3.   

    void A::OnSelDestDB() 
    {
    // TODO: Add your control notification handler code here
    B CDlg;
    CFileDialog FileOp(TRUE);
    FileOp.DoModal();
    CDlg.DestDataBaseName=FileOp.GetPathName();}B CDlg是函数OnSelDestDB的局部变量,OnSelDestDB退出后局部变量出了作用域,此中的B与其他地方的B不是一回事,可以在A中设置一个String变量保存结果,在B中通过A*ptr访问这个变量
      

  4.   

    class A
    {
    }class B
    {
     A dlg;
    }
    class B::Button1()
    {
     dlg.Domodal();
     Cpathname = FileDlg.GetpathName();}
    这样试试看;
      

  5.   

    你看看,是不是这样:B CDlg是个局部变量,当void A::OnSelDestDB() 结束时,B CDlg的生命就结束了,当在B.CPP中调用DestDataBaseName时,就为空!你考虑用static 来修饰CString DestDataBaseName,然后在void A::OnSelDestDB()里面付给它值!由于现在CString DestDataBaseName变成了类变量,不会因为当void A::OnSelDestDB() 结束时,生命消失的!
      

  6.   

    哈哈,一个月前这个问题我还在问题人,一个月后即今天,我已经可以在这方面说两句了.
    B.H
    public:CString SourceDataBaseName;
    CString DestDataBaseName;A.CPPvoid A::OnSelDestDB() 
    {
    // TODO: Add your control notification handler code here
    //B CDlg;<--------------------------------------------------1
    CFileDialog FileOp(TRUE);
    FileOp.DoModal();
    //CDlg.DestDataBaseName=FileOp.GetPathName();<--------------2//这两句不要.}
    //另加个成员函数.假设FileOp.GetPathName()返回的是CString
    CString A::GetResult()
    {
    return FileOp.GetPathName();
    }//然后在B中要创一个A的对象.B.CPPvoid B::Button1()
    {
    A Dlg;
    if(Dlg.DoModal() == IDOK)
    {
    DestDataBaseName = Dlg.GetResult();
    }
    }
    哈哈!