[C#] MaskedTextBoxプロパティの詳細と活用法

MaskedTextBoxは、C#のWindows Formsアプリケーションで使用されるコントロールで、ユーザーが特定のフォーマットに従って入力を行うことを強制するために利用されます。

例えば、電話番号や郵便番号、日付などの入力に適しています。

MaskedTextBoxの主なプロパティには、入力フォーマットを指定するMaskプロパティ、入力されたテキストを取得するTextプロパティ、マスクされた文字を表示するかどうかを制御するPasswordCharプロパティなどがあります。

これにより、ユーザー入力のバリデーションが容易になり、データの一貫性を保つことができます。

この記事でわかること
  • MaskedTextBoxの基本的なプロパティ
  • 入力フォーマットの設定方法
  • イベントの活用法
  • 複数のMaskedTextBoxの連携
  • 実用的な応用例の紹介

目次から探す

MaskedTextBoxのプロパティ

Maskプロパティ

MaskedTextBoxのMaskプロパティは、入力フォーマットを指定するための重要なプロパティです。

マスクは、ユーザーが入力する際に必要な形式を強制するために使用されます。

例えば、電話番号や日付などの特定の形式を持つデータを入力する際に役立ちます。

マスクは、特定の文字や記号を使用して定義されます。

以下は、一般的なマスクの例です。

スクロールできます
マスク例説明
000-0000電話番号
00/00/0000日付
00000-0000郵便番号

Textプロパティ

Textプロパティは、MaskedTextBoxに入力されたテキストを取得または設定するためのプロパティです。

このプロパティは、ユーザーが入力したデータをプログラム内で利用する際に使用されます。

マスクが適用されている場合、Textプロパティはマスクに従った形式で値を返します。

例えば、電話番号の入力があった場合、Textプロパティは 123-4567 のように返されます。

PasswordCharプロパティ

PasswordCharプロパティは、MaskedTextBoxがパスワード入力用に使用される場合に、入力された文字を隠すための文字を指定します。

このプロパティを設定することで、ユーザーが入力したパスワードが画面上に表示されず、代わりに指定した文字(通常はアスタリスク * )が表示されます。

maskedTextBox1.PasswordChar = '*'; // パスワードをアスタリスクで表示

PromptCharプロパティ

PromptCharプロパティは、マスク内で入力が必要な位置を示すために使用される文字を指定します。

デフォルトでは、アンダースコア _ が使用されます。

このプロパティを変更することで、ユーザーに対してより明確な入力指示を提供できます。

例えば、プロンプト文字を # に設定すると、マスク内の空白部分が # で表示されます。

maskedTextBox1.PromptChar = '#'; // プロンプト文字を#に設定

BeepOnErrorプロパティ

BeepOnErrorプロパティは、ユーザーが無効な入力を行った際に、ビープ音を鳴らすかどうかを指定するプロパティです。

このプロパティをtrueに設定すると、無効な入力があった場合に音が鳴ります。

これにより、ユーザーは入力エラーに気づきやすくなります。

maskedTextBox1.BeepOnError = true; // エラー時にビープ音を鳴らす

CutCopyMaskFormatプロパティ

CutCopyMaskFormatプロパティは、CutやCopy操作を行った際に、マスクを含めた形式でテキストを取得するか、マスクを除いた形式で取得するかを指定します。

このプロパティは、CutCopyMaskFormatの列挙型を使用して設定されます。

例えば、IncludePromptAndLiteralsを選択すると、プロンプト文字やリテラル文字も含まれた形式でコピーされます。

スクロールできます
設定値説明
IncludePromptAndLiteralsプロンプトとリテラルを含む
IncludeLiteralsリテラルのみを含む
ExcludePromptAndLiteralsプロンプトとリテラルを除外

TextMaskFormatプロパティ

TextMaskFormatプロパティは、MaskedTextBoxのTextプロパティがどのようにフォーマットされるかを指定します。

このプロパティもCutCopyMaskFormatプロパティと同様に、TextMaskFormatの列挙型を使用して設定されます。

例えば、IncludePromptAndLiteralsを選択すると、Textプロパティはプロンプト文字やリテラル文字を含む形式で返されます。

スクロールできます
設定値説明
IncludePromptAndLiteralsプロンプトとリテラルを含む
IncludeLiteralsリテラルのみを含む
ExcludePromptAndLiteralsプロンプトとリテラルを除外

MaskedTextBoxの設定方法

Maskの設定例

MaskedTextBoxのMaskプロパティを設定することで、特定の入力形式を強制することができます。

以下は、いくつかの一般的なマスクの設定例です。

// 電話番号のマスク設定
maskedTextBox1.Mask = "(999) 000-0000"; // (123) 456-7890の形式
// 日付のマスク設定
maskedTextBox2.Mask = "00/00/0000"; // 12/31/2023の形式
// 郵便番号のマスク設定
maskedTextBox3.Mask = "00000-9999"; // 12345-6789の形式

これにより、ユーザーは指定された形式に従ってデータを入力することが求められます。

カスタムマスクの作成

カスタムマスクを作成することで、特定のニーズに応じた入力形式を定義できます。

以下は、カスタムマスクの作成方法の例です。

// カスタムマスクの設定
maskedTextBox1.Mask = "A9A 9A9"; // 例: A1B 2C3の形式
maskedTextBox1.ValidatingType = typeof(string); // 入力値の型を指定

この例では、最初の文字はアルファベット、次の数字は数字、そして再びアルファベットという形式を指定しています。

これにより、特定のパターンに従った入力が強制されます。

プロパティの設定手順

MaskedTextBoxのプロパティを設定する手順は以下の通りです。

  1. MaskedTextBoxの追加: フォームデザイナーでMaskedTextBoxをフォームに追加します。
  2. プロパティウィンドウの使用: プロパティウィンドウを開き、必要なプロパティを設定します。
  3. コードでの設定: 必要に応じて、コード内でプロパティを設定します。

以下は、一般的なプロパティの設定例です。

// MaskedTextBoxの初期化
partial class MyForm : Form
{
    public MyForm()
    {
        InitializeComponent();
        
        // Maskプロパティの設定
        maskedTextBox1.Mask = "00/00/0000"; // 日付のマスク設定
        maskedTextBox1.PromptChar = '_'; // プロンプト文字の設定
        maskedTextBox1.BeepOnError = true; // エラー時にビープ音を鳴らす
    }
}

この手順に従うことで、MaskedTextBoxを効果的に設定し、ユーザーに対して適切な入力形式を提供することができます。

MaskedTextBoxの活用法

電話番号入力の実装

電話番号の入力をMaskedTextBoxで実装することで、ユーザーが正しい形式で電話番号を入力することを促すことができます。

以下は、電話番号入力用のMaskedTextBoxの設定例です。

// 電話番号入力用のMaskedTextBox設定
partial class MyForm : Form
{
    public MyForm()
    {
        InitializeComponent();
        
        // Maskプロパティの設定
        maskedTextBox1.Mask = "(999) 000-0000"; // 電話番号のマスク設定
        maskedTextBox1.PromptChar = '_'; // プロンプト文字の設定
        maskedTextBox1.BeepOnError = true; // エラー時にビープ音を鳴らす
    }
}

この設定により、ユーザーは (123) 456-7890 の形式で電話番号を入力することが求められます。

無効な入力があった場合には、ビープ音が鳴ります。

日付入力の実装

日付の入力をMaskedTextBoxで実装することで、ユーザーが正しい日付形式で入力することを容易にします。

以下は、日付入力用のMaskedTextBoxの設定例です。

// 日付入力用のMaskedTextBox設定
partial class MyForm : Form
{
    public MyForm()
    {
        InitializeComponent();
        
        // Maskプロパティの設定
        maskedTextBox2.Mask = "00/00/0000"; // 日付のマスク設定
        maskedTextBox2.PromptChar = '_'; // プロンプト文字の設定
        maskedTextBox2.BeepOnError = true; // エラー時にビープ音を鳴らす
    }
}

この設定により、ユーザーは 12/31/2023 の形式で日付を入力することが求められます。

無効な入力があった場合には、ビープ音が鳴ります。

郵便番号入力の実装

郵便番号の入力をMaskedTextBoxで実装することで、ユーザーが正しい郵便番号形式で入力することを促すことができます。

以下は、郵便番号入力用のMaskedTextBoxの設定例です。

// 郵便番号入力用のMaskedTextBox設定
partial class MyForm : Form
{
    public MyForm()
    {
        InitializeComponent();
        
        // Maskプロパティの設定
        maskedTextBox3.Mask = "00000-9999"; // 郵便番号のマスク設定
        maskedTextBox3.PromptChar = '_'; // プロンプト文字の設定
        maskedTextBox3.BeepOnError = true; // エラー時にビープ音を鳴らす
    }
}

この設定により、ユーザーは 12345-6789 の形式で郵便番号を入力することが求められます。

無効な入力があった場合には、ビープ音が鳴ります。

これらの実装により、ユーザーは特定の形式に従ったデータを簡単に入力できるようになります。

MaskedTextBoxのイベント

MaskInputRejectedイベント

MaskInputRejectedイベントは、ユーザーが無効な入力を行った際に発生します。

このイベントを利用することで、無効な入力があった場合に特定の処理を実行することができます。

例えば、エラーメッセージを表示したり、入力をクリアしたりすることが可能です。

以下は、MaskInputRejectedイベントの使用例です。

// MaskInputRejectedイベントのハンドラ
private void maskedTextBox1_MaskInputRejected(object sender, MaskInputRejectedEventArgs e)
{
    MessageBox.Show("無効な入力です。正しい形式で入力してください。");
}

このコードをMaskedTextBoxのMaskInputRejectedイベントに関連付けることで、無効な入力があった場合にメッセージボックスが表示されます。

TypeValidationCompletedイベント

TypeValidationCompletedイベントは、ユーザーが入力を完了した後、入力値が指定された型に適合するかどうかを検証した結果を受け取るためのイベントです。

このイベントを利用することで、入力値が正しい型であるかを確認し、必要に応じてエラーメッセージを表示することができます。

以下は、TypeValidationCompletedイベントの使用例です。

// TypeValidationCompletedイベントのハンドラ
private void maskedTextBox2_TypeValidationCompleted(object sender, TypeValidationEventArgs e)
{
    if (e.IsValidInput)
    {
        MessageBox.Show("入力が正しい形式です。");
    }
    else
    {
        MessageBox.Show("無効な日付形式です。再度入力してください。");
    }
}

このコードをMaskedTextBoxのTypeValidationCompletedイベントに関連付けることで、入力が正しい場合と無効な場合で異なるメッセージを表示できます。

TextChangedイベント

TextChangedイベントは、MaskedTextBoxのテキストが変更された際に発生します。

このイベントを利用することで、ユーザーが入力を行うたびに特定の処理を実行することができます。

例えば、入力内容に基づいて他のコントロールを更新することが可能です。

以下は、TextChangedイベントの使用例です。

// TextChangedイベントのハンドラ
private void maskedTextBox3_TextChanged(object sender, EventArgs e)
{
    label1.Text = "現在の郵便番号: " + maskedTextBox3.Text; // ラベルに現在の郵便番号を表示
}

このコードをMaskedTextBoxのTextChangedイベントに関連付けることで、郵便番号が変更されるたびにラベルにその内容が表示されます。

これにより、ユーザーはリアルタイムで入力内容を確認することができます。

これらのイベントを活用することで、MaskedTextBoxのユーザーインターフェースをよりインタラクティブにし、ユーザーの入力体験を向上させることができます。

応用例

フォーム全体での一貫した入力フォーマットの実装

フォーム全体で一貫した入力フォーマットを実装することで、ユーザーが異なる入力フィールドで同じ形式を維持できるようになります。

これにより、データの整合性が向上し、ユーザーの混乱を防ぐことができます。

以下は、電話番号、日付、郵便番号の入力を一貫した形式で実装する例です。

// フォーム全体での入力フォーマット設定
partial class MyForm : Form
{
    public MyForm()
    {
        InitializeComponent();
        
        // 電話番号の設定
        maskedTextBox1.Mask = "(999) 000-0000"; // 電話番号のマスク設定
        
        // 日付の設定
        maskedTextBox2.Mask = "00/00/0000"; // 日付のマスク設定
        
        // 郵便番号の設定
        maskedTextBox3.Mask = "00000-9999"; // 郵便番号のマスク設定
    }
}

このように、各MaskedTextBoxに対して適切なマスクを設定することで、ユーザーは一貫した形式でデータを入力できます。

複数のMaskedTextBoxを連携させた入力管理

複数のMaskedTextBoxを連携させることで、ユーザーが一つの入力フィールドに入力した内容に基づいて、他のフィールドの動作を制御することができます。

例えば、電話番号が入力された後に、関連する情報を自動的に表示することが可能です。

以下は、その実装例です。

// 複数のMaskedTextBoxを連携させた入力管理
private void maskedTextBox1_TextChanged(object sender, EventArgs e)
{
    // 電話番号が入力された場合に、関連情報を表示
    if (maskedTextBox1.Text.Length == 14) // (999) 000-0000形式の場合
    {
        label1.Text = "電話番号が入力されました。"; // ラベルにメッセージを表示
    }
}

このコードにより、電話番号が完全に入力された際に、ラベルにメッセージが表示されます。

これにより、ユーザーは入力が完了したことを確認できます。

MaskedTextBoxと他のコントロールの連携

MaskedTextBoxを他のコントロールと連携させることで、よりインタラクティブなユーザーインターフェースを実現できます。

例えば、MaskedTextBoxで入力された日付に基づいて、カレンダーコントロールを更新することができます。

以下は、その実装例です。

// MaskedTextBoxとカレンダーコントロールの連携
private void maskedTextBox2_TypeValidationCompleted(object sender, TypeValidationEventArgs e)
{
    if (e.IsValidInput)
    {
        DateTime inputDate = DateTime.Parse(maskedTextBox2.Text); // 入力された日付を取得
        monthCalendar1.SetDate(inputDate); // カレンダーに日付を設定
    }
}

このコードにより、ユーザーが日付を入力すると、その日付がカレンダーコントロールに反映されます。

これにより、ユーザーは視覚的に日付を確認することができ、使いやすさが向上します。

これらの応用例を通じて、MaskedTextBoxを効果的に活用し、ユーザーインターフェースをより直感的で使いやすいものにすることができます。

よくある質問

MaskedTextBoxで入力エラーが発生した場合の対処法は?

MaskedTextBoxで入力エラーが発生した場合、以下の方法で対処できます。

  • MaskInputRejectedイベントを利用: 無効な入力があった際にこのイベントを使用して、エラーメッセージを表示することができます。
  • TypeValidationCompletedイベントを利用: 入力が完了した後に、入力値が正しい型であるかを検証し、無効な場合はエラーメッセージを表示します。
  • ユーザーへのガイダンス: プロンプト文字やマスクの形式を明確にすることで、ユーザーが正しい形式で入力できるようにします。

MaskedTextBoxでカスタムマスクを作成するにはどうすればよいですか?

カスタムマスクを作成するには、MaskedTextBoxのMaskプロパティに特定のパターンを設定します。

以下の手順でカスタムマスクを作成できます。

  1. Maskプロパティの設定: 例えば、アルファベットと数字を組み合わせた形式を作成する場合、maskedTextBox.Mask = "A9A 9A9";のように設定します。
  2. ValidatingTypeの指定: 入力値の型を指定することで、より厳密な検証が可能になります。

maskedTextBox.ValidatingType = typeof(string);のように設定します。

  1. プロンプト文字の設定: プロンプト文字を変更することで、ユーザーに対して入力形式を明確に示すことができます。

MaskedTextBoxの入力制限を解除する方法はありますか?

MaskedTextBoxの入力制限を解除する方法はいくつかあります。

  • Maskプロパティを空にする: Maskプロパティを空に設定することで、マスクを解除し、自由な入力を可能にします。

maskedTextBox.Mask = "";と設定します。

  • ReadOnlyプロパティの設定: ReadOnlyプロパティをtrueに設定することで、ユーザーが入力できないようにすることもできますが、これは入力制限とは異なります。
  • カスタムロジックの実装: 入力内容に基づいて、特定の条件を満たす場合にのみマスクを適用するカスタムロジックを実装することも可能です。

これにより、柔軟な入力管理が実現できます。

まとめ

この記事では、C#のMaskedTextBoxに関する基本的なプロパティや設定方法、活用法、イベントの使い方について詳しく解説しました。

MaskedTextBoxを利用することで、ユーザーが特定の形式でデータを入力することを促し、データの整合性を保つことが可能になります。

これを機に、MaskedTextBoxを活用して、より使いやすいユーザーインターフェースを実現してみてはいかがでしょうか。

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