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
.