スポンサーリンク

【C#】テキストボックスを数値のみ入力に制限する方法

C#でテキストボックスに数値のみ入力に制限する方法です。いくつか方法がありますが、一番基本的な方法を紹介します。

スポンサーリンク

KeyPressイベントで数値のみ入力可能な様に制御する

テキストボックスに数値のみを入力させる方法は、KeyPressイベント内で制御する方法が一番簡単です。

本記事では以下の仕様でサンプルプログラムを作成します。

  • 半角数字のみ入力可能
  • BackSpaceキーとDeleteキーが使える
  • 右クリック不可にしてコピペさせない

画面は簡単なものを用意しました。

テキストボックスだけです。

ではコードを書く前に準備をしましょう。

スポンサーリンク

準備

KeyPressイベントのコードを書く前に、少しだけ準備をします。やることは3つです。

  • ImeModeプロパティをDisableに変更
  • ShortcutsEnabledプロパティをFalseに変更
  • KeyPressイベントを作成する

それぞれ、Visual Studio 上で設定しましょう。

ImeModeプロパティをDisableに変更

まず、Visual Studio のテキストボックスのImeModeプロパティDisableに変更します。

下の画像のようにImeModeプロパティを変更して下さい。

何故、こんなことをするのかと言うと、IMEモードがオンになっている時、数字以外の文字が入力可能になってしまうからです。

ShortcutsEnabledプロパティをFalseに変更

次に、Visual Studio のテキストボックスのShortcutsEnabledプロパティFalseに変更します。

下の画像のようにShortcutsEnabledプロパティを変更して下さい。

ShortcutsEnabledプロパティがTrueのままだと、右クリックでコピペして数値以外の値がテキストボックスに入ってしまうので、事前に変更しておきます。

KeyPressイベントを作成する

最後にKeyPressイベントを作成します。

プロパティ画面のイナズマ(カミナリ)マークをクリックして、KeyPressの項目を探します。その右側のプルダウンをクリックして、KeyPressを選択します。

もしプルダウン上に項目が表示されていない場合は、KeyPressの項目の右側の空白をダブルクリックして下さい。

ソースコード上でイベントが作成されていることを確認して下さい。

これで準備OKです。

スポンサーリンク

サンプルコード

さて、サンプルコードですが、ユーザーに使いやすい作りにするために、BackSpace(バックスペース)キーは入力可能とします。

こちらがサンプルコード↓

private void txtNumOnly_KeyPress(object sender, KeyPressEventArgs e)
{
    //バックスペースが押された時は有効(Deleteキーも有効)
    if (e.KeyChar == '\b')
    {
        return;
    }

    //数値0~9以外が押された時はイベントをキャンセルする
    if ((e.KeyChar < '0' || '9' < e.KeyChar))
    {
        e.Handled = true;
    }
}

これで実行すると、

  • 数字のみ入力可能
  • BackSpaceキーとDeleteキーが使える
  • 右クリック不可にしてコピペさせない

という仕様を満たしたテキストボックスが表示されます。

実際に本記事の真似をしてテキストボックスだけの画面を作成して、数字のみ入力可能になるプロパティ設定とコードを書いてみて、実行してみて下さい。

スポンサーリンク

参考サイト

Control.ImeMode プロパティ (System.Windows.Forms) | Microsoft Docs

TextBoxBase.ShortcutsEnabled プロパティ (System.Windows.Forms) | Microsoft Docs

Keycode 定数 | Microsoft Docs

スポンサーリンク

鉄道記事も書いてます!

ちょっとリフレッシュして鉄道記事も読んでみませんか?

鉄道記事バックナンバーはこちら↓

鉄道コム投稿記事一覧ページ