【问题标题】:MFC Dialog return vectorMFC Dialog 返回向量
【发布时间】:2012-07-06 23:00:15
【问题描述】:

我正在创建一个模式对话框并根据用户指定的数量动态创建文本框。然后我将这些文本框的值存储在一个向量中

vector <CString*> textBoxText;

我想在对话框关闭时将向量传回。我尝试将指针传递到对话框并更新指针:void CRadioDialog::OnBnClickedOk()。然而,这并没有奏效。我不认为我可以通过数据交换来做到这一点,有没有办法做到这一点?

谢谢,

【问题讨论】:

  • 可以在构造函数中传递引用。或者,您可以在返回向量的对话框类中创建另一个函数。

标签: c++ mfc vector modal-dialog


【解决方案1】:

你可以做到。只需确保返回实际的 CString 对象,而不是指针!

vector <CString> textBoxText; 

OnBnClickedOk 中有什么内容?

【讨论】:

  • 这是在对话框上按下“确定”按钮时的处理程序。你能解释一下如何退货吗?
【解决方案2】:

假设您有一个本地成员 CRadioDialog.h:

std::vector <CString> textBoxText;

我建议你使用 CString heare 而不是 CString*

您可以向您的 CRadioDialog.h 添加一个方法:

void fill_my_vector( std::vector<CString>& out_vector );

和 CRadioDialog.cpp:

void CRadioDialog::fill_my_vector( std::vector<CString>& out_vector )
{
    std::copy ( textBoxText.begin(), textBoxText.end(), out_vector.begin() );
}

您已经在 CRadioDialog::OnBnClickedOk() 上使用 cstrings 填充了本地 textBoxText

调用代码: 无效 main_window::caller() { ...

    std::vector <CString> results;

    CRadioDialog dlg;
    INT_PTR nResponse = dlg.DoModal();
    if (nResponse == IDOK)
    {
        dlg.fill_my_vector( results );
        /* USE YOUR VECTOR */
    }

...
}

这不是最好的优化方法,但很容易理解。 希望对您有所帮助。

【讨论】:

    【解决方案3】:

    感谢所有的帮助,我最终使用了这个非常简单的方法,并且是从另一个论坛推荐的:

    我将它添加到 dialog.h 文件中:

    public:
        const std::vector<CString>& TextBoxTexts() const
        {
            return textBoxText;
        }
    

    并在我的主视图中调用它:

    CRadioDialog dialog; 
    if(rDLG.DoModal() == IDOK)
    {   
        vector<CString> text;
        text = dialog.TextBoxTexts();
    }
    

    【讨论】:

      猜你喜欢
      • 2017-12-31
      • 1970-01-01
      • 1970-01-01
      • 2015-10-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-16
      相关资源
      最近更新 更多