EDITBOXから個別にデータを取得する方法 – プログラミング – Home

EDITBOXから個別にデータを取得す...
 
通知
すべてクリア

EDITBOXから個別にデータを取得する方法


め組
 め組
(@め組)
ゲスト
結合: 19年前
投稿: 1
Topic starter  

VC6ダイアログベースです。

今、EDITBOXを複数設定した画面がありまして、
それぞれm_edit1~m_edit5とクラスウィザードで
CString型に設定しました。

ここで、UpdateData(TRUE)とやると、エディットボックスに
入っている値がm_edit*に格納されますが、
これだと全体のデータが取得されてしまいます。

試しにこんな事やってみましたが取れません。

((CEdit*)GetDlgItem(IDC_EDIT1))->UpdateData(TRUE);

1つの場合はGetDlgItemText()とか使うしかないのでしょうか?

となると私の書いた上の一行で行われている事ってなんですか?
UpdateData()関数はCWndクラスのメンバなので、ほぼ殆どのコントロールで
使えると思っているのですが、見た目にデータが取れないとなると、
どんな処理をしているのかが気になります。

よろしくおねがいします。


引用解決済
トピックタグ
Fortran使い
 Fortran使い
(@Fortran使い)
ゲスト
結合: 19年前
投稿: 45
 

的外れかもしれませんがDDXを使ってみてはどうでしょうか?
わたしはダイアログからとのデータのやり取りで苦労した記憶はありません。
型変換なんかも勝手にやってくれるし、DDXを使うのもクラスウィザードで
Controlに対応するValueの変数を入れてやるだけで使えるので深く考えたことはありま
せんが。


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

CWndクラスのUpdateDataの説明はよく読んでみたでしょうか?
そこに説明が書いてあると思います。

UpdateData関数でMSDNを検索すると
「ダイアログ データ エクスチェンジ」に関する説明も出ています。

CWndクラスにインターフェイスが定義されているからといって
全てのコントロールで使えるとは限らないと思います。
例えば、CWnd::GetDlgCtrlIDが全てのコントロールで使えないのと同じ事です。
CWnd::UpdateDataの説明に
「ダイアログ ボックス内のデータを初期化するため、またはダイアログ データを取得し
評価するためにこのメンバ関数を呼び出します。」
と書かれているわけですし、ダイアログボックスクラスのインスタンスで無いと意味を
なさないと考えた方がいいと思います。

そもそもUpdateDataは簡易にダイアログの操作を行うためにある関数です。
それぞれのコントロールごとに操作したい場合は、GetDlgItemText()を使うか、
GetDlgItem(IDC_EDIT1)->GetWindowText等で処理するのが普通でしょう。
但し、この場合はUpdateDataの簡易なチェック機構も使えないので自前で
チェックしてエラー表示等も自分で行う必要があると思います。


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

訂正:
誤)
例えば、CWnd::GetDlgCtrlIDが全てのコントロールで使えないのと同じ事です。

正)
例えば、CWnd::GetDlgCtrlIDが全てのCWnd派生クラスで使えるとは限らないのと同じ事です。


返信引用
Mell
 Mell
(@Mell)
ゲスト
結合: 19年前
投稿: 4
 

>((CEdit*)GetDlgItem(IDC_EDIT1))->UpdateData(TRUE);
>1つの場合はGetDlgItemText()とか使うしかないのでしょうか?
>となると私の書いた上の一行で行われている事ってなんですか?

CEdit の UpdateData を呼び出したら、
CEdit の DoDataExchange が呼ばれます。
CEdit には DoDataExchange は定義されていないので、
実際に呼び出されるのは、CWnd::DoDataExchange になります。
CWnd::DoDataExchange は何もしません。(内容が空っぽな関数です)

ダイアログで UpdateData を呼び出したら、
そのダイアログでオーバーライドした DoDataExchange が呼ばれます。
クラスウィザードでコントロールのメンバー変数を作成した場合、
DoDataExchange の中に DDX / DDV 関数が書き込まれます。
DDX_Text(pDX, IDC_EDIT1, m_edit1);
のような記述が、あなたの書いているプログラムの中に追加されているはずです。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

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