[C#] NumericUpDownでキーボードから数字以外入力できないようにする方法
C#のNumericUpDown
コントロールでキーボードから数字以外の入力を防ぐには、KeyPress
イベントを利用します。
このイベントで入力されたキーをチェックし、数字や制御キー(例えば、Backspace)以外のキーが押された場合には、その入力を無効にします。
具体的には、KeyPressEventArgs
のHandled
プロパティをtrue
に設定することで、無効なキー入力をキャンセルできます。
これにより、ユーザーが数字以外の文字を入力しようとした際に、その入力が無視されるようになります。
KeyPressイベントの活用
KeyPressイベントとは
KeyPressイベントは、Windowsフォームアプリケーションにおいて、ユーザーがキーボードから入力を行った際に発生するイベントです。
このイベントを利用することで、特定のキー入力に対して処理を行ったり、入力内容を制御したりすることができます。
NumericUpDownコントロールにおいて、数字以外の入力を防ぐために非常に有用です。
KeyPressイベントの設定方法
KeyPressイベントを設定するには、まずNumericUpDownコントロールをフォームに追加し、そのプロパティからKeyPressイベントを選択します。
以下の手順で設定できます。
- Visual Studioでフォームを開く
- NumericUpDownコントロールをフォームにドラッグ&ドロップ
- プロパティウィンドウで「イベント」タブを選択
- KeyPressイベントの隣にある空欄をダブルクリック
これにより、KeyPressイベントのハンドラが自動的に生成されます。
KeyPressイベントでの入力制御
KeyPressイベントを使用して、NumericUpDownコントロールに数字以外の入力を制限する方法を以下に示します。
サンプルコードでは、数字と制御キー(Backspaceなど)のみを許可するように設定しています。
partial class MyForm : Form
{
public MyForm()
{
InitializeComponent();
numericUpDown1.KeyPress += new KeyPressEventHandler(numericUpDown1_KeyPress);
}
private void numericUpDown1_KeyPress(object sender, KeyPressEventArgs e)
{
// 数字と制御キーのみを許可
if (!char.IsControl(e.KeyChar) && !char.IsDigit(e.KeyChar))
{
e.Handled = true; // 入力を無効にする
}
}
}
このコードでは、KeyPressイベントが発生した際に、入力された文字が数字または制御キーでない場合、e.Handled
をtrue
に設定することで、その入力を無効にしています。
これにより、NumericUpDownコントロールには数字のみが入力可能となります。
実装手順
KeyPressイベントハンドラの追加
KeyPressイベントハンドラを追加することで、NumericUpDownコントロールに対するキーボード入力を制御できます。
以下の手順でハンドラを追加します。
- Visual Studioでフォームを開く
- NumericUpDownコントロールを選択
- プロパティウィンドウの「イベント」タブを開く
- KeyPressイベントの隣にある空欄をダブルクリック
これにより、KeyPressイベントに対応するメソッドが自動生成されます。
以下は、生成されたメソッドの例です。
private void numericUpDown1_KeyPress(object sender, KeyPressEventArgs e)
{
// ここに入力制御のロジックを追加します
}
数字と制御キーの判定方法
入力された文字が数字または制御キーであるかを判定するためには、char.IsDigitメソッド
とchar.IsControlメソッド
を使用します。
これにより、ユーザーが入力した文字が許可されているかどうかを確認できます。
以下のコードは、判定の実装例です。
private void numericUpDown1_KeyPress(object sender, KeyPressEventArgs e)
{
// 数字と制御キーのみを許可
if (!char.IsControl(e.KeyChar) && !char.IsDigit(e.KeyChar))
{
e.Handled = true; // 入力を無効にする
}
}
このコードでは、e.KeyChar
が制御キーまたは数字でない場合、e.Handled
をtrue
に設定し、入力を無効にしています。
入力キャンセルの実装
入力をキャンセルするためには、KeyPressイベント内でe.Handled
プロパティを使用します。
これにより、特定の条件に基づいて入力を無効にすることができます。
以下は、入力キャンセルの実装例です。
private void numericUpDown1_KeyPress(object sender, KeyPressEventArgs e)
{
// 数字と制御キーのみを許可
if (!char.IsControl(e.KeyChar) && !char.IsDigit(e.KeyChar))
{
e.Handled = true; // 入力を無効にする
}
}
このコードを使用することで、NumericUpDownコントロールに対して数字以外の入力を完全にキャンセルすることができます。
これにより、ユーザーは意図しない入力を行うことができなくなります。
応用例
小数点の入力を許可する方法
NumericUpDownコントロールで小数点の入力を許可するには、KeyPress
イベント内で小数点.
の入力を特別に扱う必要があります。
以下のコードでは、小数点がすでに入力されていない場合にのみ、小数点の入力を許可しています。
private void numericUpDown1_KeyPress(object sender, KeyPressEventArgs e)
{
// 数字、制御キー、小数点のみを許可
if (!char.IsControl(e.KeyChar) && !char.IsDigit(e.KeyChar) && e.KeyChar != '.')
{
e.Handled = true; // 入力を無効にする
}
// 小数点がすでに入力されているか確認
if (e.KeyChar == '.' && numericUpDown1.Text.Contains("."))
{
e.Handled = true; // 2つ目の小数点を無効にする
}
}
このコードにより、ユーザーは小数点を含む数値を入力できるようになりますが、同時に複数の小数点を入力することはできません。
特定のキー入力を許可する方法
特定のキー(例えば、矢印キーやEnterキーなど)を許可する場合、KeyPress
イベント内でそのキーを判定し、入力を許可することができます。
以下のコードでは、矢印キーとEnterキーを許可しています。
private void numericUpDown1_KeyPress(object sender, KeyPressEventArgs e)
{
// 数字、制御キー、矢印キー、Enterキーのみを許可
if (!char.IsControl(e.KeyChar) && !char.IsDigit(e.KeyChar) && e.KeyChar != (char)Keys.Enter &&
e.KeyChar != (char)Keys.Up && e.KeyChar != (char)Keys.Down)
{
e.Handled = true; // 入力を無効にする
}
}
このコードにより、ユーザーは数字や制御キーに加えて、矢印キーやEnterキーを使用して数値を調整できるようになります。
入力制限のカスタマイズ
入力制限をカスタマイズすることで、特定の条件に基づいて入力を制御することができます。
例えば、特定の範囲内の数値のみを許可する場合、以下のように実装できます。
private void numericUpDown1_KeyPress(object sender, KeyPressEventArgs e)
{
// 数字、制御キー、小数点のみを許可
if (!char.IsControl(e.KeyChar) && !char.IsDigit(e.KeyChar) && e.KeyChar != '.')
{
e.Handled = true; // 入力を無効にする
}
// 入力された数値が範囲内か確認
if (numericUpDown1.Value < 0 || numericUpDown1.Value > 100)
{
e.Handled = true; // 範囲外の入力を無効にする
}
}
このコードでは、NumericUpDownコントロールの値が0から100の範囲内であることを確認し、範囲外の入力を無効にしています。
これにより、ユーザーは指定された範囲内の数値のみを入力できるようになります。
まとめ
この記事では、C#のNumericUpDownコントロールにおけるKeyPressイベントを活用し、キーボードからの入力を制御する方法について詳しく解説しました。
特に、数字以外の入力を防ぐための実装手順や応用例を通じて、さまざまな入力制限の方法を紹介しました。
これを参考にして、実際のアプリケーションにおいてユーザーの入力をより適切に制御し、使いやすいインターフェースを実現してみてください。