C++ Builderでエディットボックスを次のように使うことが多い。
- 数値のみ入力可能にする
- フォーカスを失ったとき(OnExit)に値の設定を実行する
- エンターキーを押したときに値の設定を実行する
このような動作をさせるには、エディットボックスのOnKeyPressイベントハンドラに工夫をする。
void __fastcall TFDefault::Edit1KeyPress(TObject* Sender, char &Key) { if (isdigit(Key)) { return; // 数字を許可 } switch (Key) { case VK_TAB: // TABを許可 case '-': // "-"を許可 case '.': // "."を許可 break; case VK_RETURN: Edit1->OnExit(Sender); // OnExit(TObject* Sender)を実行する Abort(); // 警告音を消す break; default: Key = 0; } }
Keyの値を調べて不要な入力は無視する。値を設定する処理はOnExitに記述しておき、リターンキーが入力されたときに、OnExit(Sender)で呼び出す。1行入力であるTEditはリターンキーを「不正な入力」とみなして警告音を鳴らすので、Abort()で警告音を抑制している。