TEditにリターンを入力したときの警告音を消す

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()で警告音を抑制している。