生成したモーダルダイアログの操作 – プログラミング – Home

生成したモーダルダイアログの操作
 
通知
すべてクリア

[解決済] 生成したモーダルダイアログの操作


君江
 君江
(@君江)
ゲスト
結合: 15年前
投稿: 2
Topic starter  

はじめまして
早速ですが質問です。

CDialog dlg; //CDialogはエディットボックス付きダイアログ。
dlg.DoModal();

dlg.m_edit.SetWindowText(aaa); //m_editはエディットボックスのコントロール変数

と記述しましたが
エラーを起こしてしまいます。

エティットボックスの内容を操作するにはどのようにしたらよいのでしょうか?


引用未解決
トピックタグ
tetrapod
 tetrapod
(@tetrapod)
ゲスト
結合: 21年前
投稿: 830
 

MFC かな?
CDialog を直接使うことはありえないはずだが、実際は派生クラス C**Dialog
という前提で。

ダイアログ自体は DoModal の中で作られ、処理完了して破棄される。
DoModal から帰ってきた状態では既にダイアログ自体が存在しない。
なので DoModal の後で SetWindowText するのは無意味なのだが、その辺理解OK?
画面にダイアログが表示された時点で何らかのテキストが表示されていてほしい
ということなら C**Dialog::OnInitDialog で処理するべし。


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

クラスを使う上での方針みたいな物ですけれど、

基本的にクラス内の操作に関してはそのクラスに
操作用のメソッドを設けるかのが普通で外側から直接操作するのは
どうかなと思います。クラスのカプセル化が崩れてしまい、
独立性が失われるからです。

また、CDialogのようなウインドウ関連のインスタンスに関しては
OnInitDialogの中でコントロールの初期化等を行ないますから
ダイアログクラスの派生クラスのインスタンスを生成したら
OnInitDialog内で必要な情報はインスタンスにメソッド等で
引き渡してからDoModal等で表示させます。
特にモーダルダイアログは呼び出し側の関数内で待機状態になるので
DoModal関数から返ってくるまで外から直接の操作は出来ません。

基本的にはクラス内の操作はクラス内で完結させ、
必要な情報等を外から与えるとクラス内で反映するような仕組みに
すべきではないかと思います。

私の考え方なので100%正しいとは言いませんが、
概ね間違っていないと思います。


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

あと、ダイアログ内でユーザーが入力した値等は
ダイアログが終了する時にメンバー変数等に退避しておき、
DoModalから帰ってきた時はそのメンバー変数から値を取り出すように
すると思います。出来れば、メンバー変数を直接参照するより
アクセス用の取得関数と設定関数を作成しておき、それを呼び出すように
した方が良いかなと思います。
アクセス用の関数を作成する意味は、不正なデータを設定しようとした時に
関数ないでチェックしてエラー処理ができる等のメリットがあるからです。


返信引用
君江
 君江
(@君江)
ゲスト
結合: 15年前
投稿: 2
Topic starter  

tetrapod さんPATIOさんDoModalについてわかりやすい説明ありがとうございます
把握しました。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

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