EditBoxの入力値を参照し別のEditBoxに値を出力するには?

解決


Tom  2003-11-17 13:57:32  No: 52531  IP: [192.*.*.*]

はじめまして。
今回はじめてVC++6.0(MFC)を使用し、ダイヤログベースのソフトを作っています。
あまりにレベルの低い質問ですいません。
質問は、EditBoxを2つ並べ(A,B)  Aに入力された値 を Bに出力 という作りにしたいのです。

AのEditBoxのOnUpdateEdit()イベントで出力させようとすると、コンパイルは通るのですが実行時エラーが発生します。(ハンドルされていない例外は・・・)

コード

CEdit* myED2 =(CEdit*)GetDlgItem(IDC_EDIT2);
CEdit* myED4 =(CEdit*)GetDlgItem(IDC_EDIT4);
myED2->GetWindowText(CNo);  
myED4->SetWindowText(CNo);

OnUpdateEdit内での出力は出来ないのですか?出来ないのならば他に方法はあるのですか?  ご教授おねがいします。

編集 削除
fuku  2003-11-17 15:44:51  No: 52532  IP: [192.*.*.*]

試してみたところ、問題なく動作しました。(Win98SE VC++6.0 MFC ダイアログ)

なので、例外の原因はおそらくNULLポインタ参照だと思われ、
IDC_EDIT2かIDC_EDIT4が有効なIDではない可能性があります。
#他のダイアログで使っていたり、過去に使って削除した場合等にはコンパイルできてしまうようです。

操作したい2つのエディットボックスのIDを確認して、そのIDをいれなおしてみてください。

編集 削除
Tom  2003-11-17 15:50:17  No: 52533  IP: [192.*.*.*]

すみません。スピンボタンのプロパティウインドウの自動関連付けのチェックを外すとうまくいきました。が、スピンボタンの関連付けはどのようにで設定するとよいのでしょうか?  ご教授おねがいします。

編集 削除
fuku  2003-11-17 16:43:49  No: 52534  IP: [192.*.*.*]

また試してみたところ、確かにスピンボタンを付けると例外が飛びました。

例外が投入されたのは送り先のエディットボックスが生成されるより先にOnUpdateEditが動作したためで、
その結果、まだ存在しない送り先のエディットボックスへアクセスしようとしたため例外が投入されたようです。

これを避けるには、
・送り先のエディットボックスのタブオーダーを送り元のそれより低く設定する

・OnUpdateEditで送り先のエディットボックスが取得できたかNULL検査する

・クラスメンバに準備完了を調べるフラグを置き、コンストラクタでfalse、OnInitDialogでtrueをセットして、
  OnUpdateEditでこれを調べる

のいずれかを行えばいいでしょう。

>スピンボタンの関連付けはどのようにで設定するとよいのでしょうか?
タブオーダーを目標の直後に設定して自動関連付けをチェックする、
つまり最初のままでいいと思います。

編集 削除
Tom  2003-11-17 17:13:25  No: 52535  IP: [192.*.*.*]

>>fukuさん
ありがとうございました。
できました。
フラグを置き調べることにしました。
これでやっと次に進めそうです。
<(_ _*)> 感謝♪

編集 削除
Tom  2003-11-17 17:14:13  No: 52536  IP: [192.*.*.*]

解決チェック忘れてました。

編集 削除