0

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

vector <CString*> textBoxText;

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

谢谢,

4

3 回答 3

1

你能行的。只要确保您返回实际CString对象,而不是指针!

vector <CString> textBoxText; 

里面有什么OnBnClickedOk

于 2012-07-07T04:55:32.980 回答
1

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

std::vector <CString> textBoxText;

我建议您使用 CString hee 而不是 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

调用代码: void 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 */
    }

...
}

这不是最好的优化方法,但很容易理解。希望能帮助到你。

于 2012-07-08T07:38:41.100 回答
0

感谢所有的帮助,我最终使用了这种非常简单的方法,并从不同的论坛推荐:

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

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

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

CRadioDialog dialog; 
if(rDLG.DoModal() == IDOK)
{   
    vector<CString> text;
    text = dialog.TextBoxTexts();
}
于 2012-07-09T15:10:12.733 回答