モーダルダイアログからの値取得 – プログラミング – Home

モーダルダイアログからの値取得
 
通知
すべてクリア

[解決済] モーダルダイアログからの値取得


まりのちゃん
 まりのちゃん
(@まりのちゃん)
ゲスト
結合: 18年前
投稿: 16
Topic starter  

どなたかモーダルダイアログからの値の取得方法をご存知ないでしょうか?

やりたいことは以下です。
入力フィールドをもったダイアログを親ダイアログからDoMadalでオープン

入力フィールドに値を入力し、OKボタンを押下(ここで画面クローズ)

親ダイアログでその値を取得
です。

今現在下記のようなロジックを実装していますが、
-------------------------------------------
CString Str;
int BtnKind = (int)ChiledDlg.DoModal();
if (BtnKind == IDOK){
 ChiledDlg.m_User.GetWindowText(Str);
}
--------------------------------------------
Assertion Failedが発生していて、
トレースするとどうやらGetWindowTextの
ASSERT(::IsWindow(m_hWnd))で落ちています。
まずそもそもこの実装方法でいいのか?
(画面クローズした場合ってその後にその画面のメンバにはアクセスできないのかな?)
というところと、
この方法でよかった場合に何か他に手続き的な処理が必要なのか?
などわかる方いらっしゃいましたら返答お願いします。


引用未解決
トピックタグ
Blue
 Blue
(@Blue)
ゲスト
結合: 20年前
投稿: 1467
 

> GetWindowText
はウィンドウがないと使えません。
(ダイアログが閉じれるとウィンドウはなくなります)

別のメンバ変数に入れるようにしてみてはどうでしょうか?

もしくは
> m_User
をコントロール変数ではなく、CStringの変数にしてみるとか(これは自信ない)


返信引用
まりのちゃん
 まりのちゃん
(@まりのちゃん)
ゲスト
結合: 18年前
投稿: 16
Topic starter  

Blueさん
ありがとうございました。
解決です。

子ダイアログにCString m_UserStrのメンバ変数を設定
OnBnClickedOk()のOnOKの前で
m_User.GetWindowText(m_UserStr);
を実装

親ダイアログ側で
CString Str;
int BtnKind = (int)ParamInputDlg.DoModal();
if (BtnKind == IDOK){
Str = ParamInputDlg.m_UserStr;
}
で値の取得成功しました。

ホントたすかりました。
ありがとうございました。


返信引用
PATIO
(@patio)
Famed Member
結合: 3年前
投稿: 2660
 

ちなみに入力されたデータのチェック等が特に必要ないのであれば、
Blueさんが書いているようにCEditのコントロール変数を作成するのではなく、
CString型の値を受け取る変数をCEditに関連付けて作成するだけで
取り込みは可能になりますよ。
確か既定のOnOkが中でCDialog::Updateを呼んでいたはずなので。

VCのバージョンがわからないのでどの機能を使ってとは書きにくいですけれど。


返信引用
PATIO
(@patio)
Famed Member
結合: 3年前
投稿: 2660
 

失礼、
CDialog::UpdateではなくてCDialog::UpdateDataでした。


返信引用
PATIO
(@patio)
Famed Member
結合: 3年前
投稿: 2660
 

がーん。
CDialog::UpdateDataではなくてCWnd::UpdateDataが正確な表現なのね。
確認してから書くべきでした。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました