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} 文字";
}
}
このコードの主なポイントは以下の通りです:
MaxLength = 50
を設定して、TextBoxの最大入力文字数を50に制限しています。- TextChangedイベントを使用して、現在の入力文字数と最大文字数をリアルタイムで表示しています。
- ユーザーが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つがあります:
- MaxLengthプロパティを使用する方法
- 簡単に実装できる
- 自動的に機能する
- カスタムの制限を実装する方法
- より複雑な制限が可能
- 全角文字の扱いなどをカスタマイズできる
これらの技術を適切に使用することで、ユーザーの入力を効果的に制御し、データの整合性を保つことができます。フォーム設計やデータ入力インターフェースの作成時に、積極的に活用することをおすすめします。
コメント