[C#] MaskedTextBoxでの入力制限の設定方法

MaskedTextBoxは、C#のWindows Formsアプリケーションで使用されるコントロールで、ユーザーの入力を特定の形式に制限するために利用されます。

入力制限を設定するには、MaskedTextBoxのMaskプロパティを使用します。

このプロパティにマスク文字列を指定することで、入力形式を制御できます。

例えば、電話番号の形式を指定する場合は(999) 000-0000のように設定します。

ここで9は任意の数字、0は必須の数字を示します。

これにより、ユーザーが指定された形式に従って入力することを強制できます。

この記事でわかること
  • MaskedTextBoxの基本的な使い方
  • 入力制限の設定方法
  • 複数のMaskedTextBoxの連携方法
  • デザインカスタマイズの手法
  • ユーザー入力のリアルタイム検証方法

目次から探す

入力制限の設定方法

C#のWindowsフォームアプリケーションにおいて、MaskedTextBoxを使用することで、ユーザーの入力を制限することができます。

これにより、特定の形式でのデータ入力を促すことができ、データの整合性を保つことが可能です。

以下では、MaskedTextBoxで設定できる入力制限の方法について詳しく解説します。

マスク文字の種類と意味

MaskedTextBoxでは、さまざまなマスク文字を使用して入力形式を指定できます。

以下は、主なマスク文字とその意味です。

スクロールできます
マスク文字意味
0数字(0-9)
9数字または空白
Aアルファベット(A-Z, a-z)
aアルファベットまたは空白
L任意の文字(1文字)
?任意の文字(0文字以上)
*任意の文字(0文字以上)
.小数点

数字入力の制限

数字のみの入力を制限するためには、MaskedTextBoxMaskプロパティに"00000"のように設定します。

これにより、5桁の数字のみが入力可能になります。

以下はそのサンプルコードです。

partial class MyForm : Form
{
    public MyForm()
    {
        InitializeComponent();
        maskedTextBox1.Mask = "00000"; // 5桁の数字を入力するマスク
    }
}

この設定により、ユーザーは5桁の数字のみを入力できるようになります。

日付入力の制限

日付の入力を制限する場合は、"00/00/0000"のようにマスクを設定します。

これにより、ユーザーは日付をMM/DD/YYYY形式で入力することが求められます。

以下はそのサンプルコードです。

partial class MyForm : Form
{
    public MyForm()
    {
        InitializeComponent();
        maskedTextBox1.Mask = "00/00/0000"; // MM/DD/YYYY形式の日付を入力するマスク
    }
}

この設定により、正しい日付形式での入力が強制されます。

電話番号入力の制限

電話番号の入力を制限する場合は、"(999) 000-0000"のようにマスクを設定します。

これにより、ユーザーは電話番号を特定の形式で入力することが求められます。

以下はそのサンプルコードです。

partial class MyForm : Form
{
    public MyForm()
    {
        InitializeComponent();
        maskedTextBox1.Mask = "(999) 000-0000"; // 電話番号のマスク
    }
}

この設定により、電話番号の形式が統一され、入力ミスを防ぐことができます。

カスタムマスクの作成

特定の要件に応じてカスタムマスクを作成することも可能です。

例えば、郵便番号の入力を制限する場合は、"00000-0000"のように設定します。

以下はそのサンプルコードです。

partial class MyForm : Form
{
    public MyForm()
    {
        InitializeComponent();
        maskedTextBox1.Mask = "00000-0000"; // 郵便番号のカスタムマスク
    }
}

このように、MaskedTextBoxを使用することで、さまざまな形式の入力制限を簡単に設定することができます。

MaskedTextBoxの応用

MaskedTextBoxは、単独で使用するだけでなく、他のコントロールと連携させることで、より高度なユーザーインターフェースを構築することができます。

以下では、MaskedTextBoxの応用方法について解説します。

複数のMaskedTextBoxを連携させる

複数のMaskedTextBoxを連携させることで、ユーザーが入力したデータを相互に関連付けることができます。

例えば、電話番号とその国コードを別々のMaskedTextBoxで入力させる場合、以下のように設定します。

partial class MyForm : Form
{
    public MyForm()
    {
        InitializeComponent();
        
        maskedTextBox1.Mask = "+99 (999) 000-0000"; // 国コードと電話番号
        maskedTextBox2.Mask = "00/00/0000"; // 日付
    }
}

このように設定することで、ユーザーは国コードと電話番号を別々に入力でき、データの整合性を保つことができます。

入力エラーのハンドリング

ユーザーが不正な形式で入力した場合、エラーメッセージを表示することで、適切な入力を促すことが重要です。

MaskedTextBoxValidatingイベントを使用して、入力内容を検証することができます。

以下はそのサンプルコードです。

partial class MyForm : Form
{
    public MyForm()
    {
        InitializeComponent();
        maskedTextBox1.Validating += MaskedTextBox1_Validating;
    }
    private void MaskedTextBox1_Validating(object sender, CancelEventArgs e)
    {
        if (!maskedTextBox1.MaskFull) // マスクが完全でない場合
        {
            MessageBox.Show("正しい形式で入力してください。", "エラー", MessageBoxButtons.OK, MessageBoxIcon.Error);
            e.Cancel = true; // フォーカスを戻す
        }
    }
}

この設定により、ユーザーが不正な入力を行った場合にエラーメッセージが表示され、再入力を促すことができます。

ユーザー入力のリアルタイム検証

ユーザーが入力を行う際に、リアルタイムで検証を行うことで、即座にフィードバックを提供することができます。

TextChangedイベントを使用して、入力内容を検証することが可能です。

以下はそのサンプルコードです。

partial class MyForm : Form
{
    public MyForm()
    {
        InitializeComponent();
        maskedTextBox1.TextChanged += MaskedTextBox1_TextChanged;
    }
    private void MaskedTextBox1_TextChanged(object sender, EventArgs e)
    {
        if (maskedTextBox1.MaskFull) // マスクが完全な場合
        {
            // 入力が正しい場合の処理
            labelStatus.Text = "入力が正しいです。";
        }
        else
        {
            // 入力が不完全な場合の処理
            labelStatus.Text = "入力が不完全です。";
        }
    }
}

このように、ユーザーが入力するたびにリアルタイムで検証を行い、状態を表示することで、より良いユーザーエクスペリエンスを提供することができます。

MaskedTextBoxのデザインカスタマイズ

MaskedTextBoxは、デフォルトのスタイルだけでなく、フォントや色、プレースホルダーテキストなどをカスタマイズすることで、アプリケーションのデザインに合わせた見た目を実現できます。

以下では、MaskedTextBoxのデザインカスタマイズ方法について解説します。

フォントと色の変更

MaskedTextBoxのフォントや背景色、文字色を変更することで、ユーザーインターフェースをより魅力的にすることができます。

以下はそのサンプルコードです。

partial class MyForm : Form
{
    public MyForm()
    {
        InitializeComponent();
        
        maskedTextBox1.Font = new Font("Arial", 12); // フォントの設定
        maskedTextBox1.BackColor = Color.LightYellow; // 背景色の設定
        maskedTextBox1.ForeColor = Color.DarkBlue; // 文字色の設定
    }
}

この設定により、MaskedTextBoxの見た目が変更され、ユーザーにとって視認性が向上します。

プレースホルダーテキストの設定

プレースホルダーテキストを設定することで、ユーザーに入力形式を示すことができます。

MaskedTextBoxには直接的なプレースホルダーテキストのプロパティはありませんが、Textプロパティを使用して初期値を設定することができます。

以下はそのサンプルコードです。

partial class MyForm : Form
{
    public MyForm()
    {
        InitializeComponent();
        
        maskedTextBox1.Mask = "00/00/0000"; // 日付のマスク
        maskedTextBox1.Text = "MM/DD/YYYY"; // プレースホルダーテキストの設定
        maskedTextBox1.ForeColor = Color.Gray; // プレースホルダーテキストの色
    }
}

このように設定することで、ユーザーはどの形式で入力すればよいかを視覚的に理解しやすくなります。

プレースホルダーテキストは、ユーザーが入力を開始すると消えるようにすることが一般的です。

マスクの表示と非表示の切り替え

ユーザーが入力した内容を見やすくするために、マスクの表示と非表示を切り替える機能を実装することができます。

例えば、パスワード入力時にマスクを切り替える場合、以下のように設定します。

partial class MyForm : Form
{
    public MyForm()
    {
        InitializeComponent();
        
        maskedTextBox1.Mask = "0000-0000"; // 郵便番号のマスク
        buttonToggleMask.Click += ButtonToggleMask_Click; // ボタンのクリックイベント
    }
    private void ButtonToggleMask_Click(object sender, EventArgs e)
    {
        if (maskedTextBox1.MaskFull) // マスクが完全な場合
        {
            maskedTextBox1.Mask = ""; // マスクを非表示にする
        }
        else
        {
            maskedTextBox1.Mask = "0000-0000"; // マスクを表示する
        }
    }
}

この設定により、ユーザーはボタンをクリックすることで、マスクの表示と非表示を切り替えることができ、必要に応じて入力内容を確認することができます。

よくある質問

MaskedTextBoxで入力がうまくいかないのはなぜ?

MaskedTextBoxで入力がうまくいかない場合、以下のような原因が考えられます。

  • マスクが不完全: ユーザーが入力した内容がマスクの形式に合っていない場合、入力が受け付けられません。

例えば、日付のマスクに対して数字以外の文字を入力するとエラーになります。

  • フォーカスの問題: MaskedTextBoxがフォーカスを持っていない場合、入力ができません。

フォームが正しく表示されているか確認してください。

  • イベントハンドリングの設定ミス: ValidatingTextChangedイベントでの処理が正しく設定されていない場合、意図しない動作をすることがあります。

イベントハンドラが正しく設定されているか確認しましょう。

マスクを動的に変更することは可能か?

はい、MaskedTextBoxのマスクを動的に変更することは可能です。

Maskプロパティを使用して、ユーザーの入力状況やアプリケーションの状態に応じてマスクを変更できます。

以下のように、特定の条件に基づいてマスクを変更することができます。

maskedTextBox1.Mask = "0000-0000"; // 初期マスク
// 条件に応じてマスクを変更
maskedTextBox1.Mask = "00/00/0000"; // 新しいマスク

このように、プログラムの実行中にマスクを変更することで、柔軟な入力形式を提供できます。

MaskedTextBoxとTextBoxの違いは何か?

MaskedTextBoxTextBoxの主な違いは、入力形式の制限にあります。

以下にその違いをまとめます。

  • 入力形式の制限: MaskedTextBoxは、特定の形式(例:電話番号、日付など)での入力を強制することができますが、TextBoxは自由なテキスト入力が可能です。
  • マスクの表示: MaskedTextBoxは、マスクを使用して入力形式を視覚的に示すことができますが、TextBoxにはその機能がありません。
  • データの整合性: MaskedTextBoxを使用することで、ユーザーが正しい形式でデータを入力することを促すことができ、データの整合性を保つのに役立ちます。

TextBoxでは、入力内容の検証を別途実装する必要があります。

このように、用途に応じてMaskedTextBoxTextBoxを使い分けることが重要です。

まとめ

この記事では、C#のMaskedTextBoxを使用した入力制限の設定方法やデザインカスタマイズのテクニックについて詳しく解説しました。

特に、マスク文字の種類や日付、電話番号などの特定の形式での入力制限、さらには複数のMaskedTextBoxを連携させる方法やリアルタイムでの入力検証についても触れました。

これらの知識を活用することで、ユーザーにとって使いやすいインターフェースを構築することが可能です。

ぜひ、実際のプロジェクトにMaskedTextBoxを取り入れて、ユーザーエクスペリエンスを向上させてみてください。

当サイトはリンクフリーです。出典元を明記していただければ、ご自由に引用していただいて構いません。

関連カテゴリーから探す

  • URLをコピーしました!
目次から探す