Debug Assertion失败的InsertItem函数

时间:2013-02-05 22:14:22

标签: c++ mfc modal-dialog

当前在MFC中编写基于对话框的应用程序,当按下主对话框上的按钮时,该对话框将创建子对话框。然后,子对话框有3个编辑控制框和一个按钮。按下按钮时,将检索来自三个编辑控制框的信息并将其存储为单独的CStrings。这些CStrings传递给位于Main Dlg.cpp中的函数。该函数接受这些字符串并将它们插入列表控件中。程序构建正常并运行,直到按下添加按钮(在子对话框上)。不确定为什么程序崩溃我似乎有正确的参数?我也不确定这是否是在两个对话框之间传递这样的数据的最佳方法。任何更好的想法也值得赞赏。

弹出式添加按钮功能

 void Popup::OnBnClickedPopadd()
   {
    CString str1, str2, str3;
    CThermotronDlg dlg;
    GetDlgItemText(ID_RampEdit,str1);
    GetDlgItemText(ID_DwellEdit,str2);
    GetDlgItemText(ID_TempEdit,str3);

    dlg.ReciveAndDisplay(str1,str2,str3);
   }

接收和显示功能

 void CThermotronDlg::ReciveAndDisplay(CString str1, CString str2,CString str3){

    LPCTSTR ramp(str1),dwell(str2),temp(str3);

    MyListEx.InsertItem(1,ramp);
    MyListEx.SetItemText(0,1,dwell);
    MyListEx.SetItemText(0,2,temp);


}

1 个答案:

答案 0 :(得分:1)

您需要找到主对话框的地址并直接调用此对话框的ReceiveAndDisplay方法,而不是在弹出对话框中初始化变量CThermotronDlg dlg;。其中一种方法是访问应用程序对象的m_pMainWnd公共变量(theApp)。 OnBnClickedPopadd()的正确代码为:

 void Popup::OnBnClickedPopadd()
   {
    CString str1, str2, str3;
    CThermotronDlg *pDlg = (CThermotronDlg*)theApp.m_pMainWnd;
    GetDlgItemText(ID_RampEdit,str1);
    GetDlgItemText(ID_DwellEdit,str2);
    GetDlgItemText(ID_TempEdit,str3);

    pDlg->ReciveAndDisplay(str1,str2,str3);
   }