VC#でTextBoxに数値だけを入力する方法(簡易版)

カテゴリー: ソフトウェア  タグ: /

VS2019 C#でWindowsフォームアプリ作成で、数値専用TextBoxの覚書です。Webでは皆さんいろいろ試されているようです。それらのツマミ喰いで自分なりに実装してみました。

キー入力時、検証中、検証後の3段階

まずは、キー入力時

keypressイベントで、数値とピリオド(実数の場合)の入力に限定させる。整数の場合は5行目での’.’の比較を外します。

private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
    try
    {
        if (e.KeyChar == 0x08 || e.KeyChar == '.') return;  //BS,dot
        if (e.KeyChar < 0x30 || e.KeyChar > 0x39) e.Handled = true; //0-9 only
    }
    catch (Exception ex) { MessageBox.Show("不正な入力", "エラー"); }
}

検証中イベントで

フォーカス脱出中にvaridatingイベントで、数値かそうでないかチェックし、偽ならtextをクリアし、フォーカスを戻す(すこし強引?)。クリアするとマズいときは元の値を記憶しておく、などの処理が必要です。

数値をチェックする関数は正規表現版を使います。

private bool checkNumeric(string strg) {
    return System.Text.RegularExpressions.Regex.IsMatch(strg, @"^[-+]?[0-9]*\.?[0-9]+$");
}

private void textBox1_Validating(object sender, CancelEventArgs e)
{
    if (checkNumeric(((TextBox)sender).Text) == false) {
        ((TextBox)sender).Focus();
        ((TextBox)sender).Text = "";
    }
}

最後に検証後イベントで表示を固定

なくてもよいですが、今回の場合は変更したtextが即他のコントロールの表示に影響するので、varidatedイベントで実施。

 
private void textBox1_Validated(object sender, EventArgs e)
{
    // 表示を固定したい処理を記入;
}

正規表現版のチェックは完全ではないらしいですが、いまのところ十分間に合っています

お気軽にコメントをどうぞ。

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)