我是编写MFC代码的新手,将字符串添加到列表框中时遇到问题。当我直接调用AddString对象时,显示的代码可以正常工作,但如图所示将其添加到我自己的Test对象中时,则不能。我该怎么做,以便AddString仍可从另一个对象内部工作?也许某种继承问题?

感谢您与我一起解决这个新手问题!
邓肯

void CFileProcessorDlg::Test()
{
    m_strFullName1.Format(_T("Starting to process files"));
    m_Message1.AddString(m_strFullName1); // Add string to list box
}

void CFileProcessorDlg::OnClickedButtonStart()
{
    //Duncan's Stuff
    // TODO: Add your control notification handler code here
    CFileProcessorDlg dlg;

    UpdateData(); // Transfer data from controls to variables

    //dlg.ProcessFiles(m_InputFile, m_OutputFile); // Actually process the files here

    // Problem 5/22/2017 - this works here, but not if I move it into the Test object.
    //m_strFullName1.Format(_T("Starting to process files"));
    //m_Message1.AddString(m_strFullName1); // Add string to list box
    dlg.Test();
}

最佳答案

术语优先:您称为“我自己的测试对象”的实体实际上是一种方法。

顺便说一句,您正在从CFileProcessorDlg方法中实例化(另一个)dlg对象(名为CFileProcessorDlg::OnCickedButtonStart())。

创建dlg对象后,调用其Test()方法,然后该对象在CFileProcessorDlg::OnCickedButtonStart()末尾超出范围,因此对调用该对象的对象(this)不会产生任何有用的影响。

我认为您想做这样的事情:

void CFileProcessorDlg::OnClickedButtonStart()
{
    //Duncan's Stuff
    // TODO: Add your control notification handler code here

    UpdateData(); // Transfer data from controls to variables

    //dlg.ProcessFiles(m_InputFile, m_OutputFile); // Actually process the files here

    // Problem 5/22/2017 - this works here, but not if I move it into the Test object.
    //m_strFullName1.Format(_T("Starting to process files"));
    //m_Message1.AddString(m_strFullName1); // Add string to list box
    Test(); // more explicitly: this->Test()
}


我将您的评论留给上下文使用,但最终的变化是不实例化新的CFileProcessorDlg对象。

09-09 20:04