C#におけるテキストボックスの入力制限の方法です。半角カタカナ・全角カタカナ・ひらがなの3種類の方法を紹介します。
KeyPressイベントとTextChangedイベントで制御する
テキストボックスにカタカナとひらがなのみを入力させる方法は、KeyPressイベントとTextChangedイベントで制御する方法が一番簡単です。
本記事では以下の仕様でサンプルプログラムを作成します。
- 半角カタカナ・全角カタカナ・ひらがなのみ入力可能(各テキストボックスを用意)
- BackSpaceキーとDeleteキーが使える
- 右クリック不可にしてコピペさせない
画面は簡単なものを用意しました。
各テキストボックスは以下の仕様にします。
- 一番上のテキストボックス:半角カナのみ入力
- まんなかのテキストボックス:全角カナのみ入力
- 一番下のテキストボックス:ひらがなのみ入力
ではコードを書く前に準備をしましょう。
準備
今回の入力制御のテキストボックスを作成するにあたって、KeyPressイベントとTextChangedイベントにコーディングしますが、事前の準備が必要となります。
- ImeModeプロパティを変更する
- ShortcutsEnabledプロパティをFalseに変更
- KeyPressイベントとTextChangedイベントを作成する
それぞれ、Visual Studio 上で設定しましょう。
ImeModeプロパティを変更
まず、ImeModeプロパティの値を変更します。
Visual Studio のテキストボックスのImeModeプロパティをそれぞれ次の様に変更して下さい。
- 半角カナ→KatakanaHalf
- 全角カナ→Katakana
- ひらがな→Hiragana
画面はこんな感じ。
これでImeModeの設定は完了です。
ShortcutsEnabledプロパティをFalseに変更
次に、Visual Studio のテキストボックスのShortcutsEnabledプロパティをFalseに変更します。
下の画像のようにテキストボックスのShortcutsEnabledプロパティを変更して下さい。
ShortcutsEnabledプロパティがTrueのままだと、右クリックでコピペして半角カタカナ・全角カタカナ・ひらがな以外の値(数字や記号などの文字)がテキストボックスに入ってしまうので、事前に変更しておきます。
KeyPressイベントとTextChangedイベントを作成する
最後にKeyPressイベントとTextChangedイベントを作成します。
KeyPressイベントを作成する場合、プロパティ画面のイナズマ(カミナリ)マークをクリックして、KeyPressの項目を探します。その右側をダブルクリックしてイベントを作成します。
ダブルクリックするとイベントが作成されるので、ソースコードを確認します。
TextChangedイベントはテキストボックスをダブルクリックするだけでイベントが作成されます。
これで準備はOKです。
サンプルコード
ユーザーに使いやすい作りにするために、BackSpace(バックスペース)キーは入力可能とします。
こちらがサンプルコード↓
//半角カナのキー押下イベント private void txtHalfKanaOnly_KeyPress(object sender, KeyPressEventArgs e) { //バックスペースが押された時は有効(Deleteキーも有効) if (e.KeyChar == '\b') { return; } } //全角カナのキー押下イベント private void txtKanaOnly_KeyPress(object sender, KeyPressEventArgs e) { //バックスペースが押された時は有効(Deleteキーも有効) if (e.KeyChar == '\b') { return; } } //ひらながのキー押下イベント private void txtHiraganaOnly_KeyPress(object sender, KeyPressEventArgs e) { //バックスペースが押された時は有効(Deleteキーも有効) if (e.KeyChar == '\b') { return; } } //半角カナのテキストボックス値変更イベント private void txtHalfKanaOnly_TextChanged(object sender, EventArgs e) { //RegexクラスのIsMatchで正規表現を使って判定 if (Regex.IsMatch(txtHalfKanaOnly.Text, @"^[\uFF66-\uFF9F]+$") == false) { //半角カタカナ以外が入っていたら、テキストボックスをクリア txtHalfKanaOnly.Text = ""; return; } } //全角カナのテキストボックス値変更イベント private void txtKanaOnly_TextChanged(object sender, EventArgs e) { //RegexクラスのIsMatchで正規表現を使って判定 if (Regex.IsMatch(txtHalfKanaOnly.Text, @"^\p{IsKatakana}*$") == false) { //全角カタカナ以外が入っていたら、テキストボックスをクリア txtKanaOnly.Text = ""; return; } } //ひらながのテキストボックス値変更イベント private void txtHiraganaOnly_TextChanged(object sender, EventArgs e) { //RegexクラスのIsMatchで正規表現を使って判定 if (Regex.IsMatch(txtHalfKanaOnly.Text, @"^\p{IsHiragana}*$") == false) { //ひらがな以外が入っていたら、テキストボックスをクリア txtHiraganaOnly.Text = ""; return; } }
KeyPressイベントにはバックスペースが押された時は有効するためのロジックを、TextChangedイベントには正規表現で判定して、指定の文字種以外が入っていたらテキストボックスをクリアするロジックを入れています。
これで実行すると、
- 半角カタカナ・全角カタカナ・ひらがなのみ入力可能
- BackSpaceキーとDeleteキーが使える
- 右クリック不可にしてコピペさせない
という仕様を満たしたテキストボックスが表示されます。
実際に本記事の真似をしてテキストボックスだけの画面を作成して、実行してみて下さい。
関連記事
参考サイト
Control.ImeMode プロパティ (System.Windows.Forms) | Microsoft Docs
TextBoxBase.ShortcutsEnabled プロパティ (System.Windows.Forms) | Microsoft Docs
Regex.IsMatch メソッド (System.Text.RegularExpressions) | Microsoft Docs
.