VB.NETにおけるテキストボックスの入力制限の方法です。半角カタカナ・全角カタカナ・ひらがなの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イベントはコントロールからダブルクリック作成して下さい。
サンプルコード
ユーザーに使いやすい作りにするために、BackSpace(バックスペース)キーは入力可能とします。
こちらがサンプルコード↓
'System.Text.RegularExpressionsを追加 Imports System.Text.RegularExpressions Public Class Form_VB_TextBox_Kana_Only '半角カナのキー押下イベント Private Sub txtHalfKanaOnly_KeyPress(sender As Object, e As KeyPressEventArgs) Handles txtHalfKanaOnly.KeyPress If e.KeyChar = ControlChars.Back Then Exit Sub End If End Sub '全角カナのキー押下イベント Private Sub txtKanaOnly_KeyPress(sender As Object, e As KeyPressEventArgs) Handles txtKanaOnly.KeyPress If e.KeyChar = ControlChars.Back Then Exit Sub End If End Sub 'ひらながのキー押下イベント Private Sub txtHiraganaOnly_KeyPress(sender As Object, e As KeyPressEventArgs) Handles txtHiraganaOnly.KeyPress If e.KeyChar = ControlChars.Back Then Exit Sub End If End Sub '半角カナのテキストボックス値変更イベント Private Sub txtHalfKanaOnly_TextChanged(sender As Object, e As EventArgs) Handles txtHalfKanaOnly.TextChanged 'RegexクラスのIsMatchで正規表現を使って判定 If Regex.IsMatch(txtHalfKanaOnly.Text, "^[\uFF66-\uFF9F]+$") = False Then '半角カタカナ以外が入っていたら、テキストボックスをクリア txtHalfKanaOnly.Text = "" End If End Sub '全角カナのテキストボックス値変更イベント Private Sub txtKanaOnly_TextChanged(sender As Object, e As EventArgs) Handles txtKanaOnly.TextChanged 'RegexクラスのIsMatchで正規表現を使って判定 If Regex.IsMatch(txtHalfKanaOnly.Text, "^\p{IsKatakana}*$") = False Then '全角カタカナ以外が入っていたら、テキストボックスをクリア txtKanaOnly.Text = "" End If End Sub 'ひらながのテキストボックス値変更イベント Private Sub txtHiraganaOnly_TextChanged(sender As Object, e As EventArgs) Handles txtHiraganaOnly.TextChanged 'RegexクラスのIsMatchで正規表現を使って判定 If Regex.IsMatch(txtHalfKanaOnly.Text, "^\p{IsHiragana}*$") = False Then 'ひらがな以外が入っていたら、テキストボックスをクリア txtHiraganaOnly.Text = "" End If End Sub End Class
KeyPressイベントとTextChangedイベントは同じロジックを入れています。
- KeyPressイベント…バックスペースが押された時に有効
- TextChangedイベント…半角カタカナ・全角カタカナ・ひらがな以外はクリア
というものです。
これで実行すると、
- 半角カタカナ・全角カタカナ・ひらがなのみ入力可能
- BackSpaceキーとDeleteキーが使える
- 右クリック不可にしてコピペさせない
という仕様を満たしたテキストボックスが表示されます。
実際に本記事の真似をしてテキストボックスだけの画面を作成して、実行してみて下さい。
関連記事
.