他ダイアログのEditの値を取得 – プログラミング – Home

他ダイアログのEditの値を取得
 
通知
すべてクリア

[解決済] 他ダイアログのEditの値を取得


けん★
 けん★
(@けん★)
ゲスト
結合: 23年前
投稿: 28
Topic starter  

MFC使用でダイアログベースのアプリで、メインダイアログのボタン押下で
起動させたサブダイアログからメインダイアログのEditの値を取得したいの
ですが、

★ JIKUはメインダイアログのEdit名

CEdit* Edit_Jiku = (CEdit*)GetDlgItem(JIKU);
CString csJiku;

Edit_Jiku->GetWindowText(csJiku);

このようにするとコンパイルは通るのですが、
実行時にアプリケーションエラーで強制終了になってしまいます。

今度は

★ JIKUはメインダイアログのEdit名
★ MAINはメインダイアログ名

CEdit* Edit_Jiku = (CEdit*)GetDlgItem(MAIN,JIKU);
CString csJiku;

Edit_Jiku->GetWindowText(csJiku);

とやるとコンパイルが通らなくなってしまいました。

GetDlgItemにメインダイアログのハンドルを指定してやればいいと思うのですが、
どうなんでしょうか?


引用未解決
トピックタグ
TAKA
 TAKA
(@TAKA)
ゲスト
結合: 23年前
投稿: 117
 

こんにちわ
メインダイアログでボタン押下時にEditボックスの内容を取得して
サブダイアログに引数で渡すではだめなんでしょうか?
だめなら、サブダイアログ作成時に、メインダイアログのアドレスを渡して
そこから取得してみては?


返信引用
けん★
 けん★
(@けん★)
ゲスト
結合: 23年前
投稿: 28
Topic starter  

お返事ありがとうございます。

メインダイアログからサブダイアログ起動はボタン押下時にDoModal 関数を
使用しているのですが、引数で渡すことなんて可能なのでしょうか?


返信引用
sugar
 sugar
(@sugar)
ゲスト
結合: 24年前
投稿: 448
 

class CSubDlg
{
...

Public:
CString m_strParam; // データ受け渡し用に定義
...
}

CMainDlg::OnButtonClick()
{
...

CSubDlg dlg;
dlg.m_strParam = ...; // 任意の文字列をセット
dlg.DoModal();

...
}

こんな感じでもいいと思います。


返信引用
TAKA
 TAKA
(@TAKA)
ゲスト
結合: 23年前
投稿: 117
 

えっと、サブダイアログ作成時
コンストラクタに引数でわたしてあげれば可能です。


返信引用
CdS
 CdS
(@CdS)
ゲスト
結合: 24年前
投稿: 176
 

引数というか一番簡単なのはサブダイアログダイアログにpublicなCString型のメンバ変数を作り(例えばm_csText)、

CEdit* Edit_Jiku = (CEdit*)GetDlgItem(JIKU);
CString csJiku;
Edit_Jiku->GetWindowText(csJiku);

CSubDlg dlg;
dlg.m_csText = csJiku;
dlg.DoModal();

などとしてやって、サブダイアログ側でm_csTextを使えばいいです。

#この辺はWindowsプログラミングというよりC++の基本的なことだと思います。
そういったところをもう一度学習されることをお薦めします。


返信引用
けん★
 けん★
(@けん★)
ゲスト
結合: 23年前
投稿: 28
Topic starter  

みなさんありがとうございました。

サブダイアログにpublicの変数を作成し、
起動前にセットする方法で解決いたしました。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

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