[C#] MaskedTextBoxプロパティの詳細と活用法
MaskedTextBoxは、C#のWindows Formsアプリケーションで使用されるコントロールで、ユーザーが特定のフォーマットに従って入力を行うことを強制するために利用されます。
例えば、電話番号や郵便番号、日付などの入力に適しています。
MaskedTextBoxの主なプロパティには、入力フォーマットを指定するMask
プロパティ、入力されたテキストを取得するText
プロパティ、マスクされた文字を表示するかどうかを制御するPasswordChar
プロパティなどがあります。
これにより、ユーザー入力のバリデーションが容易になり、データの一貫性を保つことができます。
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のプロパティを設定する手順は以下の通りです。
- MaskedTextBoxの追加: フォームデザイナーでMaskedTextBoxをフォームに追加します。
- プロパティウィンドウの使用: プロパティウィンドウを開き、必要なプロパティを設定します。
- コードでの設定: 必要に応じて、コード内でプロパティを設定します。
以下は、一般的なプロパティの設定例です。
// 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を効果的に活用し、ユーザーインターフェースをより直感的で使いやすいものにすることができます。
まとめ
この記事では、C#のMaskedTextBoxに関する基本的なプロパティや設定方法、活用法、イベントの使い方について詳しく解説しました。
MaskedTextBoxを利用することで、ユーザーが特定の形式でデータを入力することを促し、データの整合性を保つことが可能になります。
これを機に、MaskedTextBoxを活用して、より使いやすいユーザーインターフェースを実現してみてはいかがでしょうか。