• ベストアンサー

エディットボックスの入力制限について

いつもお世話になっております。 VS2005でC++を使ってWindowsプログラミングの作成を行っています。 エディットボックスに半角数字のみ入力するような制限はできますが、 この制限をもっと詳しくし、例えば数字の0~60までしか入力できないようにすることは可能でしょうか。 ご教授お願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • hitomura
  • ベストアンサー率48% (325/664)
回答No.3

Win32 APIを使っていて、入力があるたびに値のチェックをするのであれば、WM_COMMANDの処理で通知コードがEN_UPDATEまたはEN_CHANGEの場合を扱えば実現できます。 たとえば、エディットボックスのあるダイアログボックスのメッセージハンドラをに以下のような文を挿入すれば、エディットボックスの入力値が変わるごとに入力チェックをしてくれます(半角スペース*2を全角スペースに変換しています)。 case WM_COMMAND: (挿入ここから)  if (HIWORD(wParam) == EN_UPDATE/* 表示の変更前にチェックするならEN_CHANGE */ && LOWORD(wParam) == IDC_EDIT/* チェックを行うエディットボックスのコントロールID */)  {   char buf[256]; /* 文字列処理用バッファ */   int value; /* 入力値 */   GetWindowText((HWND)lParam, buf, 255); /* エディットボックスの文字列取得 */   value = atoi(buf);   if (value < 0 || 60 < value) /* 入力値チェック */   {    /* 入力値が範囲外であることをユーザーに通知する */    MessageBox(hDlg, "0から60までの間の数を入力してください。", "入力エラー", MB_OK);   }  } (以下、他のWM_COMMANDメッセージ処理) ただし、入力値チェックを1からにして動かしてみればわかりますが、入力があるたび値のチェックをすると使う側からすればウザいです。 このような場合、自分ならば、値を入力ではなく選択させる(コンボボックスやスピンコントロールなどを使って)か、入力チェックを入力した値を利用/取得する時点で行うようにします。

mymusic54
質問者

お礼

こんにちは。 お返事大変遅くなり申し訳ありません。 なるほど・・・ コンボボックス等を使う手段、いいですね。 その方がユーザ側の入力ミスも無くなりますもんね。 いろいろ試してみたいと思います! ご回答ありがとうございました。 また何かありましたらよろしくお願いいたします。 ここで質問を締め切らせていただきます。

その他の回答 (2)

  • hitomura
  • ベストアンサー率48% (325/664)
回答No.2

Windowsプログラミングに利用しているライブラリは以下のいずれでしょうか。 (1)Win32 API (2)MFC (3).NET(C++/CLI) (4)その他(ライブラリ名を具体的に書いてください)

mymusic54
質問者

お礼

お返事遅くなりごめんなさい。 私の利用しているライブラリは  (1)Win32 API です。 説明不足で申し訳ありません。 よろしくお願いします。

  • GaiaMauer
  • ベストアンサー率33% (5/15)
回答No.1

BCB(C++Builder5.0)の話でVS2005ではどうかわかりませんが・・・ 私は半角数字のみに制限するのをOnKeyPressで実現し、数字の入力範囲の制限はEditOnChangeで実現し ていました。 OnChangeのほうで行う処理は ・適当な変数にエディットのデータを変換して代入 ・その変数の値が制限範囲内か判定する ・制限範囲外なら変数に適当な値、例えば最大値・最小値を代入する ・エディットに変数の値を表示する VS2005だとこれでできるかどうかわかりませんが、参考になれば幸いです。

mymusic54
質問者

お礼

ご回答ありがとうございます! 返事が遅くなりごめんなさい。 その方法でいろいろ試してみたいと思います。 情報ありがとうございました。 プログラムできましたらまた報告させて頂きます。

関連するQ&A