Windowsフォームアプリケーションを開発していると、ユーザーから数値のみを入力してもらいたい場面がよくあります。例えば、年齢、金額、数量などの入力フィールドでは、数字以外の文字を入力させないようにすることで、データの整合性を保ち、入力ミスを防ぐことができます。この記事では、C#を使って整数と小数のみを入力できるテキストボックスを作成する方法を、初心者にも分かりやすく解説します。
目次
KeyPressイベントを使用する方法
テキストボックスの入力を数値のみに制限する最も一般的な方法は、KeyPressイベントを使用することです。このイベントは、ユーザーがキーを押すたびに発生し、入力される文字を制御することができます。
以下に、整数と小数のみを許可するテキストボックスの基本的なコード例を示します:
using System;
using System.Windows.Forms;
public partial class Form1 : Form
{
private TextBox numericTextBox;
public Form1()
{
InitializeComponent();
CreateNumericTextBox();
}
private void CreateNumericTextBox()
{
numericTextBox = new TextBox
{
Location = new System.Drawing.Point(10, 10),
Size = new System.Drawing.Size(200, 20)
};
numericTextBox.KeyPress += NumericTextBox_KeyPress;
this.Controls.Add(numericTextBox);
}
private void NumericTextBox_KeyPress(object sender, KeyPressEventArgs e)
{
// バックスペースと数字を許可
if (char.IsControl(e.KeyChar) || char.IsDigit(e.KeyChar))
{
return;
}
// 小数点を許可(ただし、既に小数点がある場合は許可しない)
if (e.KeyChar == '.' && !numericTextBox.Text.Contains("."))
{
return;
}
// 上記以外の文字は無効
e.Handled = true;
}
}
このコードの主なポイントは以下の通りです:
numericTextBox.KeyPress += NumericTextBox_KeyPress;
で、テキストボックスのKeyPressイベントにイベントハンドラを登録します。char.IsControl(e.KeyChar)
でバックスペースなどの制御文字を許可します。char.IsDigit(e.KeyChar)
で数字の入力を許可します。- 小数点の入力を1回だけ許可し、2回目以降は無効にします。
- 上記の条件に当てはまらない文字は、
e.Handled = true;
で入力をキャンセルします。
入力値の検証
KeyPressイベントでの制御に加えて、テキストボックスの内容全体を検証することも重要です。以下のメソッドを使用して、入力された値が有効な数値であるかを確認できます:
private bool IsValidNumber(string input)
{
return decimal.TryParse(input, out _);
}
このメソッドは、例えばテキストボックスのTextChangedイベントや、フォームの送信時に使用できます:
private void numericTextBox_TextChanged(object sender, EventArgs e)
{
if (!IsValidNumber(numericTextBox.Text))
{
numericTextBox.BackColor = Color.LightPink;
}
else
{
numericTextBox.BackColor = SystemColors.Window;
}
}
整数のみを許可する場合
整数のみを許可したい場合は、KeyPressイベントハンドラを以下のように修正します:
private void IntegerTextBox_KeyPress(object sender, KeyPressEventArgs e)
{
if (!char.IsControl(e.KeyChar) && !char.IsDigit(e.KeyChar))
{
e.Handled = true;
}
}
この場合、小数点の入力チェックを省略しています。
まとめ
C#で整数・小数のみのテキストボックスを作成する方法として、主に以下のポイントがあります:
- KeyPressイベントを使用して、入力時に文字を制御する。
- 数字、小数点、制御文字(バックスペースなど)のみを許可する。
- 必要に応じて、入力値の検証を行う。
これらの技術を使用することで、ユーザーの入力エラーを防ぎ、データの整合性を保つことができます。数値入力フォームや計算機能を持つアプリケーションなど、様々な場面で活用できるでしょう。
コメント