エディットボックスから入力された変数のエラー処理 – プログラミング – Home

エディットボックスから入力された変数の...
 
通知
すべてクリア

[解決済] エディットボックスから入力された変数のエラー処理


card
 card
(@card)
ゲスト
結合: 23年前
投稿: 3
Topic starter  

ダイアログベースでエディットボックスからdouble型の変数に代入しています。
この際、数字以外(文字や記号など)が入力されると、エラーのダイアログが表示されますが、
その後、自分でその処理をしないといけないと思います。

C言語などで、直接キーボードから入力する際は、gets()やsscanf()を組み合わせてエラー処理
するのは分かるのですが、VC++でエディットボックスから取得したものにたいしてはどうすれ
ばいいのか分かりません(バッファにも入っていないし)。なにか、アドバイスいただけないで
しょうか。

VCプログラミング以前の内容かもしれませんが、よろしくお願いします。

MFC使用 VC6 WIN2000


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

 エディットボックスの数字チェックをはずし入力が確定した時点で自分でチェック処理を入れ
る。これならエディットボックスからの文字列は取得出来るのですよね。

> C言語などで、直接キーボードから入力する際は、gets()やsscanf()を組み合わせてエラー
> 処理するのは分かるのですが、VC++でエディットボックスから取得したものにたいしてはど
> うすれ

が分かっているのですからチェック部分はお分かりなのですよね。


返信引用
くたくた
 くたくた
(@くたくた)
ゲスト
結合: 23年前
投稿: 119
 

最も簡単なのは あばさん の仰る方法です。

もう少し便利にしようとお考えなら、1文字入力毎に正当性の検査をすれば
そのソフトを使う側にとってより助かります。(入力ミスの早期発見、早期訂正)

この場合、CEditの派生クラスを作り各WMハンドラで目的の処理をするようにします。
で、この派生クラスをDDX変数のCEditと置換すればいいです。

私の場合、こういうエディットボックスはいろんなソフトで多用する為、DLL化しています。


返信引用
あば
 あば
(@あば)
ゲスト
結合: 23年前
投稿: 25
 

いけね。自分も客に入力チェック直すように言われてたの忘れてた!


返信引用
card
 card
(@card)
ゲスト
結合: 23年前
投稿: 3
Topic starter  

あばさん、くたくたさんありがとうございます。

> エディットボックスの数字チェックをはずし入力が確定した時点で自分でチェック
> 処理を入れる。これならエディットボックスからの文字列は取得出来るのですよね。

これは、UpdateData(TRUE)で、DDXで指定したメンバ変数に代入する前にチェックを行うとい
うことなのでしょうか(メンバ変数もCString型? 今のままでは、「a」などと入力されても
double型のメンバ変数には代入されません)。それとも、数字のチェックをはずすというのは、
DDV機能での範囲指定をしない、もしくはたんに、スタイルで番号のチェックを入れない(今
は、少数点を入れたいのでチェックしていませんが)ということでしょうか。

> が分かっているのですからチェック部分はお分かりなのですよね。

今までは、自分でしか使わないプログラムしか作ってこなかったので(今回もそれに近いものが
ありますが)、エラー処理についてはあまりやっていませんでした。私が使ってきたのは、上記
の通り、
char buf[20];
double i;
gets(buf);
sscanf(buf,%f,&i);
のようにして、sscanfの戻り値でエラー判定ぐらいしかありません。あるいは、scanfで読み込
んで、getsで読み捨てる程度のことしかやったことがありません。
今回も単純に、エディットボックスに入力された値を直接bufに入れられたりできないかなどと
考えてしまっています(これが、甘いのだとは思うのですが)。

あばさんや、くたくたさんのおっしゃりたい意図が自分には分かっていないと思うので、もう少
し詳しく教えていただけないでしょうか。

くたくたさんの一文字ずつの判定に関しては自分もそう出来ればと思っています。調べてやって
みようと思います。


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

CWnd::GetWindowText()もしくは
CWnd::GetDlgItemText()は使えますか?

これらがgets()の代わりに使えると思います。


返信引用
あば
 あば
(@あば)
ゲスト
結合: 23年前
投稿: 25
 

 エディットボックスに数値以外を入力した時にエラーチェックに引っかかったという事ですの
でダイアログベースのアプリケーションは出来上がっている物としてお話しします。

 MFCでいいますとリソースエディタでそのエディットボックスのプロパティを見れば[数値]
というチェックボックスがあると思いますがそのチェックをはずして下さい。これでなんでもお
かまいなしに入力出来るようになると思います。

 後はClassWizardでそのエディットボックスにメンバー変数を割り当てて下さい。今回ですと
タイプはCStringですね。

 後は
http://www.microsoft.com/japan/msdn/library/ja/vclib/html/_mfc_cwnd.3a3a.updated
ata.asp

こちらを参照ください。


返信引用
あば
 あば
(@あば)
ゲスト
結合: 23年前
投稿: 25
 

後はが多かった。m(__)m

リンク切れ訂正
http://www.microsoft.com/japan/msdn/library/ja/vclib/html/_mfc_cwnd.3a3a.updated
ata.asp


返信引用
あば
 あば
(@あば)
ゲスト
結合: 23年前
投稿: 25
 

ちゃんと読んでなかった。すみません。
ですね。ほとんどやってるんですね。

 違いはCStringで受けなければならないということだけです。あとはご自由に文字列処理でチ
ェック処理を作って下さい。

ゴミレスでした。m(__)m


返信引用
card
 card
(@card)
ゲスト
結合: 23年前
投稿: 3
Topic starter  

tibさん、あばさん、くたくたさんありがとうございます。

GetDlgItemText()を使うことで、解決できました。
みなさんの、親切な回答に感謝します。ありがとうございました。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

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