我现在一个对话框中想调用另一个对话框中的控件变量,如
CString sName;
CLoginDlg dlg;
dlg.m_LoginName.GetWindowText(sName);
就是想把LoginDlg对话框中的m_LoginName控件变量的值取出来,
但编译时链接运行都能通过,
可是访问到这段代码时老是出错,请问是何原因,这样调用对吗?

解决方案 »

  1.   

    出什么错?
    你可以试试:
    GetDlgText(IDC_LoginName,sName);
      

  2.   

    dlg.m_LoginName.GetWindowText(sName);对话框还没创建或已经关闭了,m_LoginName已经被destroy了,不是有效的编辑控件了。可以在CLoginDlg中添加一个CString变量,对话框关闭时将m_LoginName的内容取道这个CString变量中,然后通过这个变量得到结果sName = dlg.m_strTtttt;
      

  3.   

    不会啊,你做的完全正确,建议你在CLoginDlg 这个对话框里检查一下m_LoginName是否被正确的赋值.加两个断点,就可以查出错了。
      

  4.   

    我改了,怎么还是不行啊.
    问题是这样的,我在登陆窗口中,输入用户名和密码,根据该用户的权限分别执行.权限为1的话是管理员,权限为2是普通管理员.
    部分具体的代码如下:
    BaseRecordset rst;
    if(IsUser==1)
    {
    rst.Open("用户信息表",adCmdTable);
    }
    else if(IsUser==2)
    {
                      CString sName,sql;
                      CLoginDlg dlg;//此处就是调用LoginDlg对话框的变量
                      sName = dlg.m_sName;//m_sName为LoginDlg对话框中的成员变量
                      sql.Format("SELECT * FROM 用户信息表 WHERE User_Name='%s'",sName);
                      rst.Open(sql,adCmdText);
    }
    this->m_Grid_User.SetRecordset(rst.GetRecordset());
    rst.Close();
      

  5.   

    各位高手!
    我把sName输出到别的文件中,
    他的值竟是空值,
    真搞不懂,不知是哪错了?
      

  6.   

    你是先出现LoginDlg ,输入用户名和密码,然后判断是1还是2吧,
    如果这样为什么在2里面还要定义一个LoginDlg,用原先的不就行了,新的对话框什么都没做如果第一次定义LoginDlg,应该先创建
      

  7.   

    CLoginDlg dlg;
    这时候还没创建窗口,可用成员变量
    dlg.m_LoginName.GetWindowText(sName);
      

  8.   

    明白了,如果是代码在子窗口里,就应该GetParent(),而不是一个新创建一个窗口