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*の代わりにCStringheareを使用することをお勧めします

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()で、ローカルtextBoxTextにcstringをすでに入力しています

呼び出しコード: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 に答える