スポンサーリンク

【C#】テキストボックスをカタカナとひらがなのみの入力に制限する方法

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キーが使える
  • 右クリック不可にしてコピペさせない

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

実際に本記事の真似をしてテキストボックスだけの画面を作成して、実行してみて下さい。

スポンサーリンク

関連記事

【C#】テキストボックスを数値のみ入力に制限する方法
C#でテキストボックスに数値のみ入力に制限する方法です。いくつか方法がありますが、一番基本的な方法を紹介します。
【VB.NET】テキストボックスをカタカナとひらがなのみの入力に制限する方法
VB.NETにおけるテキストボックスの入力制限の方法です。半角カタカナ・全角カタカナ・ひらがなの3種類の方法を紹介します。
スポンサーリンク

参考サイト

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

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

Keycode 定数 | Microsoft Docs

Regex.IsMatch メソッド (System.Text.RegularExpressions) | Microsoft Docs

スポンサーリンク

鉄道記事も書いてます!

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

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

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