MENU

TextBoxへ入力できる文字数を制限する

C# TextBoxへ入力できる文字数を制限する

C#でWindowsフォームアプリケーションを開発していると、ユーザーの入力を制御する必要が出てくることがあります。特に、TextBoxに入力できる文字数を制限したい場面は多いでしょう。例えば、ユーザー名やパスワードの最大長を設定したり、SNSの投稿文字数を制限したりする場合などです。この記事では、C#を使ってTextBoxへの入力文字数を制限する方法を、初心者にも分かりやすく解説します。

目次

MaxLengthプロパティを使用する方法

TextBoxの入力文字数を制限する最も簡単な方法は、MaxLengthプロパティを使用することです。このプロパティを設定すると、指定した文字数以上の入力を自動的に防ぐことができます。

以下に、基本的なコード例を示します:

using System;
using System.Windows.Forms;

public partial class Form1 : Form
{
    private TextBox limitedTextBox;
    private Label infoLabel;

    public Form1()
    {
        InitializeComponent();
        CreateLimitedTextBox();
    }

    private void CreateLimitedTextBox()
    {
        limitedTextBox = new TextBox
        {
            Location = new System.Drawing.Point(10, 10),
            Size = new System.Drawing.Size(200, 20),
            MaxLength = 50 // 最大50文字に制限
        };

        infoLabel = new Label
        {
            Location = new System.Drawing.Point(10, 40),
            Size = new System.Drawing.Size(200, 20),
            Text = "0 / 50 文字"
        };

        limitedTextBox.TextChanged += LimitedTextBox_TextChanged;

        this.Controls.Add(limitedTextBox);
        this.Controls.Add(infoLabel);
    }

    private void LimitedTextBox_TextChanged(object sender, EventArgs e)
    {
        infoLabel.Text = $"{limitedTextBox.Text.Length} / {limitedTextBox.MaxLength} 文字";
    }
}

このコードの主なポイントは以下の通りです:

  1. MaxLength = 50 を設定して、TextBoxの最大入力文字数を50に制限しています。
  2. TextChangedイベントを使用して、現在の入力文字数と最大文字数をリアルタイムで表示しています。
  3. ユーザーが51文字目以降を入力しようとしても、自動的に入力が無視されます。

文字数制限の動的な変更

場合によっては、プログラムの実行中に文字数制限を変更したいことがあります。以下は、ボタンクリックで制限を変更する例です:

private Button changeButton;

private void CreateChangeButton()
{
    changeButton = new Button
    {
        Location = new System.Drawing.Point(10, 70),
        Size = new System.Drawing.Size(200, 30),
        Text = "制限を30文字に変更"
    };

    changeButton.Click += ChangeButton_Click;
    this.Controls.Add(changeButton);
}

private void ChangeButton_Click(object sender, EventArgs e)
{
    limitedTextBox.MaxLength = 30;
    infoLabel.Text = $"{limitedTextBox.Text.Length} / 30 文字";
    changeButton.Enabled = false;
}

このコードを追加することで、ボタンをクリックすると文字数制限が30文字に変更されます。

入力制限のカスタマイズ

MaxLengthプロパティは簡単に使えますが、より複雑な制限が必要な場合もあります。例えば、全角文字を2文字としてカウントしたい場合などです。このような場合は、KeyPressイベントを使用してカスタムの制限を実装できます。

private int maxBytes = 50;

private void LimitedTextBox_KeyPress(object sender, KeyPressEventArgs e)
{
    if (e.KeyChar == (char)Keys.Back) return; // バックスペースは常に許可

    string newText = limitedTextBox.Text + e.KeyChar;
    int byteCount = System.Text.Encoding.GetEncoding("Shift_JIS").GetByteCount(newText);

    if (byteCount > maxBytes)
    {
        e.Handled = true; // 入力をキャンセル
    }
}

この例では、Shift_JISエンコーディングでのバイト数を計算し、全角文字を2バイトとしてカウントしています。

まとめ

TextBoxへの入力文字数を制限する方法として、主に以下の2つがあります:

  1. MaxLengthプロパティを使用する方法
    • 簡単に実装できる
    • 自動的に機能する
  2. カスタムの制限を実装する方法
    • より複雑な制限が可能
    • 全角文字の扱いなどをカスタマイズできる

これらの技術を適切に使用することで、ユーザーの入力を効果的に制御し、データの整合性を保つことができます。フォーム設計やデータ入力インターフェースの作成時に、積極的に活用することをおすすめします。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

目次