2012-07-06 54 views
0

我正在創建一個模態對話框,並根據用戶指定的數量動態創建文本框。然後我這些文本框的值存儲在一個向量MFC對話框返回矢量

vector <CString*> textBoxText; 

我要傳遞的載體回對話框關閉時。我試着將一個指針傳入對話框並更新指針:void CRadioDialog :: OnBnClickedOk()。但是,這並不奏效。我不認爲我可以通過數據交換來做到這一點,有沒有辦法做到這一點?

感謝,

+0

您可以在構造函數中傳遞引用。或者,您可以在返回矢量的對話框類中創建另一個函數。 – 2012-07-09 02:27:10

回答

0

感謝所有幫助,我結束了使用這種方法,很容易,從不同的論壇建議:

我加入這個到dialog.h文件:

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

,並呼籲它在我的主要觀點:

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

你可以做到這一點。只要確保你返回實際的CString對象,而不是指針!

vector <CString> textBoxText; 

什麼是OnBnClickedOk

+0

這是在對話框上按下「確定」按鈕時的處理程序。你能解釋一下如何歸還嗎? – mgalal 2012-07-07 18:24:02

1

假設你有一個本地成員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()); 
} 

你已經填寫你的本地textBoxText與CRadioDialog :: OnBnClickedOk()

調用代碼你cstrings: 無效main_window ::調用者(){ ...

std::vector <CString> results; 

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

... 
} 

這不是最佳的optiomization方法,但很容易undestand。 希望它有幫助。