[C#] TextBoxで数値のみを入力可能にする方法
C#でTextBoxに数値のみを入力可能にするには、いくつかの方法があります。
最も一般的な方法は、TextBoxのKeyPress
イベントを利用して、入力されたキーが数字かどうかをチェックすることです。
イベントハンドラ内で、e.KeyChar
を使って入力された文字を取得し、Char.IsDigitメソッド
で数字かどうかを判定します。
数字でない場合は、e.Handled
をtrue
に設定して入力を無効にします。
また、TextChanged
イベントを使用して、入力後にテキスト全体を検証し、数値以外の文字が含まれている場合に削除する方法もあります。
これにより、ユーザーが数値以外の文字を入力するのを防ぐことができます。
TextBoxで数値のみを入力可能にする基本的な方法
C#のWindowsフォームアプリケーションにおいて、TextBoxコントロールを使用して数値のみを入力可能にする方法はいくつかあります。
ここでは、KeyPressイベント、TextChangedイベント、そしてMaskedTextBoxを用いた実装方法について詳しく解説します。
KeyPressイベントを用いた実装
KeyPressイベントの概要
KeyPressイベントは、ユーザーがキーボードからキーを押したときに発生します。
このイベントを利用することで、特定のキー入力を制御することができます。
数字の入力を許可する方法
以下のサンプルコードでは、KeyPressイベントを使用して、数字のみを入力できるように設定しています。
partial class MyForm : Form
{
public MyForm()
{
InitializeComponent();
textBox1.KeyPress += new KeyPressEventHandler(textBox1_KeyPress);
}
private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
// 数字以外の入力を無効にする
if (!char.IsControl(e.KeyChar) && !char.IsDigit(e.KeyChar))
{
e.Handled = true; // 入力を無効にする
}
}
}
このコードを実行すると、TextBoxには数字のみが入力可能になります。
バックスペースキーの処理
バックスペースキーを使用して文字を削除することも可能です。
上記のコードでは、char.IsControl(e.KeyChar)
を使用することで、バックスペースキーの入力を許可しています。
小数点やマイナス記号の許可
小数点やマイナス記号を許可する場合、以下のように条件を追加します。
private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
// 数字、小数点、マイナス記号以外の入力を無効にする
if (!char.IsControl(e.KeyChar) && !char.IsDigit(e.KeyChar) &&
e.KeyChar != '.' && e.KeyChar != '-')
{
e.Handled = true; // 入力を無効にする
}
}
このようにすることで、数値、小数点、マイナス記号の入力が可能になります。
TextChangedイベントを用いた実装
TextChangedイベントの概要
TextChangedイベントは、TextBoxの内容が変更されたときに発生します。
このイベントを利用して、入力された内容をリアルタイムでチェックすることができます。
正規表現を用いた数値チェック
以下のサンプルコードでは、正規表現を使用して数値のみを許可する方法を示します。
private void textBox1_TextChanged(object sender, EventArgs e)
{
// 正規表現を使用して数値チェック
if (!Regex.IsMatch(textBox1.Text, @"^\d*\.?\d*$"))
{
// 不正な入力があった場合、最後の文字を削除
textBox1.Text = textBox1.Text.Remove(textBox1.Text.Length - 1);
textBox1.SelectionStart = textBox1.Text.Length; // カーソルを最後に移動
}
}
このコードを実行すると、TextBoxには数値のみが入力されるようになります。
入力後のテキスト修正方法
TextChangedイベントを使用することで、ユーザーが不正な入力を行った場合に自動的に修正することができます。
上記のコードでは、正規表現にマッチしない場合に最後の文字を削除しています。
MaskedTextBoxを用いた実装
MaskedTextBoxの概要
MaskedTextBoxは、特定の形式の入力を強制するためのコントロールです。
数値入力専用のマスクを設定することで、ユーザーが正しい形式で入力することを促すことができます。
数値入力用のマスク設定
以下のサンプルコードでは、MaskedTextBoxを使用して数値入力用のマスクを設定しています。
partial class MyForm : Form
{
public MyForm()
{
InitializeComponent();
maskedTextBox1.Mask = "00000"; // 5桁の数字を入力するマスク
}
}
このコードを実行すると、MaskedTextBoxには5桁の数字のみが入力可能になります。
MaskedTextBoxの利点と制限
MaskedTextBoxの利点は、ユーザーが入力する際に自動的にマスクが適用されるため、入力形式を強制できる点です。
しかし、柔軟性に欠けるため、特定の条件(例えば、小数点や負の数)を許可する場合には、他の方法と組み合わせる必要があります。
応用例
ここでは、TextBoxで数値のみを入力可能にする基本的な方法を応用した具体的な例を紹介します。
小数点を含む数値、負の数、特定の範囲内の数値を入力できるようにする方法を解説します。
小数点を含む数値の入力
小数点を含む数値を入力可能にするためには、KeyPressイベントやTextChangedイベントでの条件を調整する必要があります。
以下のサンプルコードでは、小数点を含む数値の入力を許可しています。
private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
// 数字、小数点以外の入力を無効にする
if (!char.IsControl(e.KeyChar) && !char.IsDigit(e.KeyChar) && e.KeyChar != '.')
{
e.Handled = true; // 入力を無効にする
}
// 小数点が既に入力されている場合、再度の入力を無効にする
if (e.KeyChar == '.' && textBox1.Text.Contains("."))
{
e.Handled = true; // 入力を無効にする
}
}
このコードを実行すると、ユーザーは小数点を含む数値を入力できるようになります。
負の数の入力を許可する
負の数を入力可能にするためには、マイナス記号の入力を許可する必要があります。
以下のサンプルコードでは、負の数の入力を許可しています。
private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
// 数字、小数点、マイナス記号以外の入力を無効にする
if (!char.IsControl(e.KeyChar) && !char.IsDigit(e.KeyChar) &&
e.KeyChar != '.' && e.KeyChar != '-')
{
e.Handled = true; // 入力を無効にする
}
// マイナス記号は最初の位置にのみ許可
if (e.KeyChar == '-' && textBox1.Text.Length > 0)
{
e.Handled = true; // 入力を無効にする
}
// 小数点が既に入力されている場合、再度の入力を無効にする
if (e.KeyChar == '.' && textBox1.Text.Contains("."))
{
e.Handled = true; // 入力を無効にする
}
}
このコードを実行すると、ユーザーは負の数を含む小数点数を入力できるようになります。
特定の範囲内の数値のみを許可する
特定の範囲内の数値のみを許可するためには、TextChangedイベントを使用して、入力された数値が範囲内かどうかをチェックします。
以下のサンプルコードでは、1から100までの範囲内の数値のみを許可しています。
private void textBox1_TextChanged(object sender, EventArgs e)
{
// 数値が範囲内かどうかをチェック
if (double.TryParse(textBox1.Text, out double value))
{
if (value < 1 || value > 100)
{
// 範囲外の場合、最後の文字を削除
textBox1.Text = textBox1.Text.Remove(textBox1.Text.Length - 1);
textBox1.SelectionStart = textBox1.Text.Length; // カーソルを最後に移動
}
}
}
このコードを実行すると、ユーザーは1から100の範囲内の数値のみを入力できるようになります。
範囲外の数値が入力された場合は、自動的に削除されます。
まとめ
この記事では、C#のWindowsフォームにおいてTextBoxで数値のみを入力可能にする方法について詳しく解説しました。
具体的には、KeyPressイベントやTextChangedイベントを利用した実装方法、さらにMaskedTextBoxを用いたアプローチを紹介しました。
これらの技術を活用することで、ユーザーが意図しない入力を防ぎ、より使いやすいアプリケーションを作成することが可能です。
ぜひ、実際のプロジェクトにこれらの方法を取り入れて、ユーザーエクスペリエンスを向上させてみてください。