C# WinFormsで数値のみ入力可能なTextBoxを作成する方法
日本語説明
C#のWinFormsアプリケーションで、数値のみを入力できるTextBoxを作成する方法です。これにより、ユーザーが文字や特殊文字を入力することを防ぎ、数値の入力のみを許可します。
手順
TextBoxコントロールのイベントハンドラーを追加:
- フォームデザイナーでTextBoxコントロールを配置します。
- TextBoxコントロールの
KeyPress
イベントハンドラーを追加します。
KeyPressイベントハンドラーで入力文字を検証:
KeyPress
イベントハンドラー内で、e.KeyChar
プロパティを使用して入力された文字を検証します。e.KeyChar
が数値でない場合、e.Handled = true
を設定して入力イベントを処理し、文字を入力させないようにします。
コード例
private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
// 数字またはコントロールキー以外の文字が入力された場合
if (!char.IsDigit(e.KeyChar) && !e.KeyChar.Equals((char)Keys.Back))
{
// 入力イベントを処理し、文字を入力させない
e.Handled = true;
}
}
解説
char.IsDigit(e.KeyChar)
: 入力された文字が数字かどうかを判定します。!e.KeyChar.Equals((char)Keys.Back)
: 入力された文字がBackspaceキーでないかどうかを判定します。Backspaceキーは数値入力に必要なので、許可します。e.Handled = true
: 入力イベントを処理し、文字を入力させないようにします。
- この方法は、数値の入力のみを許可する基本的な方法です。より複雑な入力制限が必要な場合は、正規表現やカスタムバリデーションを使用することもできます。
- 他のコントロール(例えば、NumericUpDown)を使用することもできますが、TextBoxを使用することでより柔軟なカスタマイズが可能になります。
C#で数値のみ入力可能なTextBoxを作成するコード例
以下のコードは、C#のWinFormsアプリケーションで数値のみを入力可能なTextBoxを作成する方法を示しています。
private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
// 数字またはコントロールキー以外の文字が入力された場合
if (!char.IsDigit(e.KeyChar) && !e.KeyChar.Equals((char)Keys.Back))
{
// 入力イベントを処理し、文字を入力させない
e.Handled = true;
}
}
コード解説
textBox1_KeyPress
イベントハンドラー:- このイベントハンドラーは、TextBoxコントロールの
KeyPress
イベントが発生したときに呼び出されます。 e.KeyChar
プロパティは、入力された文字を表します。
- このイベントハンドラーは、TextBoxコントロールの
数値またはコントロールキー以外の文字が入力された場合:
入力イベントを処理し、文字を入力させない:
- MaskedTextBoxコントロールは、特定のフォーマットで入力を受け付けるTextBoxです。
- 数値のみを入力させる場合は、マスクを数値のフォーマット(例えば、"99999")に設定します。
maskedTextBox1.Mask = "99999";
正規表現を使用
- 正規表現を使用して、数値のみの入力パターンを定義します。
- TextBoxの
TextChanged
イベントハンドラーで正規表現を使用して入力値を検証し、不正な文字が入力された場合はエラーメッセージを表示したり、入力値を修正したりします。
private void textBox1_TextChanged(object sender, EventArgs e)
{
Regex regex = new Regex(@"^\d+$");
if (!regex.IsMatch(textBox1.Text))
{
// エラー処理
MessageBox.Show("数値のみ入力してください。");
textBox1.Text = "";
}
}
カスタムバリデーション
- カスタムバリデーションを作成して、入力値を検証します。
Validating
イベントハンドラーでカスタムバリデーションを実行し、不正な入力があった場合はエラーメッセージを表示したり、入力値を修正したりします。
private void textBox1_Validating(object sender, CancelEventArgs e)
{
if (!IsNumeric(textBox1.Text))
{
// エラー処理
MessageBox.Show("数値のみ入力してください。");
e.Cancel = true;
}
}
private bool IsNumeric(string text)
{
double number;
return double.TryParse(text, out number);
}
- これらの方法は、それぞれ異なる利点と欠点があります。
- MaskedTextBoxは、簡単な数値入力制限に適しています。
- 正規表現は、より複雑な入力制限が必要な場合に使用できます。
- カスタムバリデーションは、独自の検証ロジックを実装したい場合に使用できます。
選択基準
- 必要な入力制限の複雑さに基づいて方法を選択してください。
- ユーザビリティと開発効率も考慮してください。
- 適切な方法を選択することで、より使いやすいアプリケーションを作成することができます。
c# .net winforms