[C#] MaskedTextBoxでのフォーマット設定方法

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

フォーマット設定は、Maskプロパティを使用して行います。

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

例えば、電話番号の入力には(999) 000-0000、日付には00/00/0000といったマスクを設定します。

9は任意の数字、0は必須の数字、Lは必須の文字、?は任意の文字を示します。

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

この記事でわかること
  • MaskedTextBoxの基本的な使い方
  • フォーマット設定の方法
  • デザインカスタマイズのテクニック
  • 複数のMaskedTextBoxの活用法
  • データベースとの連携方法

目次から探す

フォーマット設定の基本

C#のMaskedTextBoxは、特定の形式での入力をユーザーに促すための便利なコントロールです。

ここでは、MaskedTextBoxのフォーマット設定の基本について解説します。

マスク文字の種類と意味

MaskedTextBoxでは、以下のようなマスク文字を使用して入力形式を指定します。

スクロールできます
マスク文字意味
0数字(0-9)
9任意の数字または空白
A任意のアルファベット(大文字・小文字)
a任意のアルファベット(小文字)
L任意のアルファベット(大文字)
?任意の文字(空白を許可)
*任意の文字(空白を許可しない)
.小数点
/スラッシュ
ハイフン

数字フォーマットの設定例

数字の入力を制限するために、MaskedTextBoxのMaskプロパティに 0000 と設定することで、4桁の数字のみを受け付けることができます。

public partial class MyForm : Form
{
    public MyForm()
    {
        InitializeComponent();
        maskedTextBox1.Mask = "0000"; // 4桁の数字を要求
    }
}

この設定により、ユーザーは4桁の数字を入力することが求められます。

日付フォーマットの設定例

日付の入力を促すためには、Maskプロパティに 00/00/0000 と設定します。

これにより、ユーザーは「日/月/年」の形式で日付を入力できます。

public partial class MyForm : Form
{
    public MyForm()
    {
        InitializeComponent();
        maskedTextBox1.Mask = "00/00/0000"; // 日/月/年の形式
    }
}

この設定により、ユーザーは正しい日付形式で入力することができます。

電話番号フォーマットの設定例

電話番号の入力には、一般的に (999) 000-0000 の形式を使用します。

この場合、Maskプロパティに以下のように設定します。

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

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

MaskedTextBoxの応用設定

MaskedTextBoxは、基本的なフォーマット設定だけでなく、さまざまな応用が可能です。

ここでは、カスタムフォーマットの作成や動的変更、入力制限とバリデーションについて解説します。

カスタムフォーマットの作成

MaskedTextBoxでは、独自のカスタムフォーマットを作成することができます。

例えば、特定の文字列を含むフォーマットを設定することが可能です。

以下の例では、郵便番号のフォーマット 999-9999 を設定します。

public partial class MyForm : Form
{
    public MyForm()
    {
        InitializeComponent();
        maskedTextBox1.Mask = "999-9999"; // 郵便番号のカスタムフォーマット
    }
}

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

フォーマットの動的変更

MaskedTextBoxのフォーマットは、プログラムの実行中に動的に変更することもできます。

例えば、ユーザーの選択に応じて異なるフォーマットを適用することができます。

public partial class MyForm : Form
{
    public MyForm()
    {
        InitializeComponent();
        maskedTextBox1.Mask = "0000"; // 初期フォーマットを設定
    }
    private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
    {
        if (comboBox1.SelectedItem.ToString() == "電話番号")
        {
            maskedTextBox1.Mask = "(999) 000-0000"; // 電話番号フォーマットに変更
        }
        else if (comboBox1.SelectedItem.ToString() == "日付")
        {
            maskedTextBox1.Mask = "00/00/0000"; // 日付フォーマットに変更
        }
    }
}

このように、ユーザーの選択に応じてMaskedTextBoxのフォーマットを変更することができます。

入力制限とバリデーション

MaskedTextBoxを使用することで、ユーザーの入力を制限し、バリデーションを行うことができます。

例えば、特定の条件を満たさない入力を拒否することができます。

public partial class MyForm : Form
{
    public MyForm()
    {
        InitializeComponent();
        maskedTextBox1.Mask = "0000"; // 4桁の数字を要求
    }
    private void maskedTextBox1_Leave(object sender, EventArgs e)
    {
        if (!maskedTextBox1.MaskFull)
        {
            MessageBox.Show("正しい形式で入力してください。"); // バリデーションエラーメッセージ
            maskedTextBox1.Focus(); // フォーカスを戻す
        }
    }
}

この設定により、ユーザーが正しい形式で入力しなかった場合にエラーメッセージを表示し、再度入力を促すことができます。

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

MaskedTextBoxは、見た目をカスタマイズすることで、ユーザーにとって使いやすいインターフェースを提供できます。

ここでは、フォントや色の設定、プレースホルダーの設定、ユーザーインターフェースの改善について解説します。

フォントと色の設定

MaskedTextBoxのフォントや色を変更することで、アプリケーションのデザインに統一感を持たせることができます。

以下の例では、フォントサイズと背景色を設定しています。

public partial class MyForm : Form
{
    public MyForm()
    {
        InitializeComponent();
        maskedTextBox1.Font = new Font("Arial", 12); // フォントをArial、サイズ12に設定
        maskedTextBox1.BackColor = Color.LightYellow; // 背景色を薄い黄色に設定
        maskedTextBox1.ForeColor = Color.DarkBlue; // 文字色を濃い青に設定
    }
}

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

プレースホルダーの設定

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

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

public partial class MyForm : Form
{
    public MyForm()
    {
        InitializeComponent();
        maskedTextBox1.Mask = "00/00/0000"; // 日付のフォーマット
        maskedTextBox1.Text = "日/月/年"; // プレースホルダーとして初期値を設定
    }
    private void maskedTextBox1_Enter(object sender, EventArgs e)
    {
        if (maskedTextBox1.Text == "日/月/年")
        {
            maskedTextBox1.Text = ""; // フォーカス時に初期値をクリア
        }
    }
    private void maskedTextBox1_Leave(object sender, EventArgs e)
    {
        if (string.IsNullOrWhiteSpace(maskedTextBox1.Text))
        {
            maskedTextBox1.Text = "日/月/年"; // フォーカスを外した時に初期値を戻す
        }
    }
}

このように、プレースホルダーのような機能を実装することができます。

ユーザーインターフェースの改善

ユーザーインターフェースを改善するためには、MaskedTextBoxの配置やサイズ、ラベルの追加などが重要です。

以下の例では、ラベルを追加してMaskedTextBoxの用途を明確にしています。

public partial class MyForm : Form
{
    public MyForm()
    {
        InitializeComponent();
        
        Label label = new Label();
        label.Text = "日付を入力してください:";
        label.Location = new Point(10, 10);
        this.Controls.Add(label); // ラベルをフォームに追加
        maskedTextBox1.Location = new Point(10, 30); // MaskedTextBoxの位置を設定
        maskedTextBox1.Mask = "00/00/0000"; // 日付のフォーマット
    }
}

このように、ラベルを追加することで、ユーザーが何を入力すべきかを明確に示すことができ、使いやすさが向上します。

MaskedTextBoxの実装例

MaskedTextBoxを活用した実装例をいくつか紹介します。

これにより、実際のアプリケーションでの使用方法を理解しやすくなります。

簡単なフォームアプリケーションの作成

まずは、基本的なMaskedTextBoxを使用した簡単なフォームアプリケーションを作成します。

この例では、ユーザーに日付を入力させるMaskedTextBoxを配置します。

public partial class MyForm : Form
{
    public MyForm()
    {
        InitializeComponent();
        
        // MaskedTextBoxの設定
        maskedTextBox1.Mask = "00/00/0000"; // 日付のフォーマット
        maskedTextBox1.Location = new Point(10, 10);
        this.Controls.Add(maskedTextBox1); // フォームに追加
    }
}

このアプリケーションを実行すると、ユーザーは「日/月/年」の形式で日付を入力できるMaskedTextBoxが表示されます。

複数のMaskedTextBoxを使用したフォーム

次に、複数のMaskedTextBoxを使用して、電話番号と郵便番号を入力するフォームを作成します。

public partial class MyForm : Form
{
    public MyForm()
    {
        InitializeComponent();
        
        // 電話番号用のMaskedTextBox
        MaskedTextBox maskedTextBoxPhone = new MaskedTextBox();
        maskedTextBoxPhone.Mask = "(999) 000-0000"; // 電話番号のフォーマット
        maskedTextBoxPhone.Location = new Point(10, 10);
        this.Controls.Add(maskedTextBoxPhone); // フォームに追加
        // 郵便番号用のMaskedTextBox
        MaskedTextBox maskedTextBoxZip = new MaskedTextBox();
        maskedTextBoxZip.Mask = "999-9999"; // 郵便番号のフォーマット
        maskedTextBoxZip.Location = new Point(10, 50);
        this.Controls.Add(maskedTextBoxZip); // フォームに追加
    }
}

このフォームでは、ユーザーが電話番号と郵便番号をそれぞれ正しい形式で入力できるようになります。

データベースとの連携

最後に、MaskedTextBoxを使用して入力されたデータをデータベースに保存する例を示します。

この例では、ユーザーが入力した電話番号をSQLiteデータベースに保存します。

using System.Data.SQLite;
public partial class MyForm : Form
{
    public MyForm()
    {
        InitializeComponent();
        
        // 電話番号用のMaskedTextBox
        MaskedTextBox maskedTextBoxPhone = new MaskedTextBox();
        maskedTextBoxPhone.Mask = "(999) 000-0000"; // 電話番号のフォーマット
        maskedTextBoxPhone.Location = new Point(10, 10);
        this.Controls.Add(maskedTextBoxPhone); // フォームに追加
        // 保存ボタン
        Button saveButton = new Button();
        saveButton.Text = "保存";
        saveButton.Location = new Point(10, 50);
        saveButton.Click += (sender, e) => SavePhoneNumber(maskedTextBoxPhone.Text);
        this.Controls.Add(saveButton); // フォームに追加
    }
    private void SavePhoneNumber(string phoneNumber)
    {
        using (SQLiteConnection connection = new SQLiteConnection("Data Source=database.db;Version=3;"))
        {
            connection.Open();
            string query = "INSERT INTO PhoneNumbers (Number) VALUES (@number)";
            using (SQLiteCommand command = new SQLiteCommand(query, connection))
            {
                command.Parameters.AddWithValue("@number", phoneNumber);
                command.ExecuteNonQuery(); // データベースに保存
            }
        }
        MessageBox.Show("電話番号が保存されました。");
    }
}

この例では、ユーザーが入力した電話番号をSQLiteデータベースに保存する機能を実装しています。

ボタンをクリックすると、入力された電話番号がデータベースに追加されます。

よくある質問

MaskedTextBoxで入力エラーを防ぐには?

MaskedTextBoxで入力エラーを防ぐためには、以下の方法を活用できます。

  • マスクの設定: MaskedTextBoxのMaskプロパティを適切に設定することで、ユーザーが正しい形式で入力することを強制できます。
  • バリデーションの実装: フォーカスを外した際に、入力がマスクに合致しているかを確認し、エラーメッセージを表示することで、ユーザーに再入力を促すことができます。
  • イベントハンドラの利用: LeaveイベントやValidatingイベントを使用して、入力内容をチェックし、エラーがあれば適切な処理を行うことが重要です。

MaskedTextBoxのフォーマットを変更するには?

MaskedTextBoxのフォーマットを変更するには、以下の手順を実行します。

  1. Maskプロパティの設定: MaskedTextBoxのMaskプロパティに新しいフォーマットを設定します。

例えば、電話番号のフォーマットに変更する場合は、maskedTextBox1.Mask = "(999) 000-0000";のように設定します。

  1. ユーザーの選択に応じた変更: ComboBoxなどの他のコントロールを使用して、ユーザーの選択に基づいてMaskプロパティを動的に変更することも可能です。

MaskedTextBoxでの入力をクリアする方法は?

MaskedTextBoxでの入力をクリアする方法は以下の通りです。

  • Textプロパティを空にする: maskedTextBox1.Text = "";とすることで、MaskedTextBoxの入力をクリアできます。
  • Clearメソッドの使用: maskedTextBox1.Clear();メソッドを使用することでも、入力をクリアすることができます。
  • ボタンのクリックイベント: ボタンを配置し、そのクリックイベントで上記のいずれかの方法を実行することで、ユーザーが簡単に入力をクリアできるようにすることができます。

まとめ

この記事では、C#のMaskedTextBoxを使用したフォーマット設定や応用方法について詳しく解説しました。

特に、カスタムフォーマットの作成や動的な変更、デザインのカスタマイズに関する具体的な実装例を通じて、実際のアプリケーションでの活用方法を紹介しました。

これを機に、MaskedTextBoxを効果的に活用し、ユーザーにとって使いやすいインターフェースを構築してみてください。

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

関連カテゴリーから探す

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