C# 数値入力コントロールの使い方(NumericUpDown)

C#サンプル プログラムプログラミング
スポンサーリンク

C# サンプル プログラム一覧


数値のみが入力できる NumericUpDown を使ったサンプルです。

NumericUpDownはテキストボックスに外観は似ています。

見た目はこんな感じです。

テキストボックスに上げ下げボタンをつけた感じです。

特徴は

・数値のみ入力可

・3桁ごとのカンマ表示ができる

・数値の範囲(-10000~10000のように)を制限できる

・小数部の桁数を制限できる

と数値を入力するのに都合の良いコントロールです。

サンプルでは

・小数部0桁、0 ~ 10000の範囲で入力可能とする

・小数部2桁、-10000 ~ 10000の範囲で入力可能とする

の2つのNumericUpDownを作成しました。

 

注意点

入力された値はTextとValueから取得できます。

Text ・・・空は空文字として、カンマがあればカンマつきとして取得されます。

Value・・・0は0、空は0、カンマなしとして取得されます。

これは、これで良いのですけど・・・

 

場合によっては、0は0、空は空、カンマなしで取得したいときもあると思います。

Textを見て空なら空、それ以外はValueをコンソールに出力するサンプルを作成しました。

この辺りは必要に応じて使い分ければ良いのかと思います。

 

サンプルの内容

画面起動時

2つのNumericUpDownに対して使うための①~⑥の設定を行っています。

(実際の設定はForm1_Loadから呼ばれる initNumericUpDown で行っています。)

①小数部の桁数を設定する

②最小値を設定する

③最大値を設定する

④初期表示を空にする

⑤3桁ごとのカンマ表示に設定する

⑥右寄せに設定する

Console出力クリック時

2つのNumericUpDownのText、Value、Valueを文字列にしたものをコンソールに出力する

使用部品

 

No項目名Textname部品
1少数部なし(見出し)少数部なしlabel1Label
2少数部なし(入力欄)デフォルト(設定なし)numericUpDown1NumericUpDown
3少数部あり(見出し)label1Label
4少数部あり(入力欄)デフォルト(設定なし)numericUpDown2NumericUpDown
5Console出力ボタンConsole出力button1Button
スポンサーリンク

プログラミング

言語:C#

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace WindowsFormsApp22
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        /// <summary>
        /// 画面起動時処理
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void Form1_Load(object sender, EventArgs e)
        {
            // 小数部0桁、0 ~ 10000の範囲で入力可能とする
            initNumericUpDown(numericUpDown1, 0, -10000, 10000);

            // 小数部2桁、-10000 ~ 10000の範囲で入力可能とする
            initNumericUpDown(numericUpDown2, 2, -10000, 10000);
        }

        /// <summary>
        /// NumericUpDown初期設定
        /// </summary>
        /// <param name="c">NumericUpDown</param>
        /// <param name="decimalPlaces">小数部桁数</param>
        /// <param name="minimum">最小値</param>
        /// <param name="maximum">最大値</param>
        private void initNumericUpDown(NumericUpDown c, int decimalPlaces, decimal minimum, decimal maximum)
        {
            // 小数部の桁数を設定する
            c.DecimalPlaces = decimalPlaces;

            // 最小値を設定する
            c.Minimum = minimum;

            // 最大値を設定する
            c.Maximum = maximum;

            // 初期表示を空にする
            c.Text = "";

            // 3桁ごとのカンマ表示に設定する
            c.ThousandsSeparator = true;

            // 右寄せに設定する
            c.TextAlign = HorizontalAlignment.Right;
        }

        /// <summary>
        /// numericUpDownの値を文字列で返す
        /// </summary>
        /// <param name="c"></param>
        /// <returns></returns>
        private string getNumericUpDownToString(NumericUpDown c)
        {
            // 未入力なら空文字を返す
            if (System.String.IsNullOrEmpty(c.Text)) {
                return String.Empty;
            }

            // 値を返す
            return c.Value.ToString();
        }

        /// <summary>
        /// Console出力クリック
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button1_Click(object sender, EventArgs e)
        {

            //少数部なしを出力する
            string s1 = getNumericUpDownToString(numericUpDown1);
            Console.WriteLine($"少数部なし:Text[{numericUpDown1.Text}] Value:[{numericUpDown1.Value}] 文字列:[{s1}]");

            // 少数部ありを出力する
            string s2 = getNumericUpDownToString(numericUpDown2);
            Console.WriteLine($"少数部あり:Text[{numericUpDown2.Text}] Value:[{numericUpDown2.Value}] 文字列:[{s2}]");
        }

    }
}

実行結果

画面起動時です。

Console出力をクリックします。

Textは空、Valueは0、文字列は0ですね。OKです。

 

どちらにも1000を入力します。

Console出力をクリックします。

Text、Value、文字列の値は全て同じです。(Valueの少数部が消えてるけど基本おなじ)

 

どちらにも-1000を入力します。

Console出力をクリックします。

Text、Value、文字列の値は全て同じです。

 

小数部ありに1000.25を入力します。

Console出力をクリックします。

Text、Value、文字列の値は全て同じです。

以上です。

スポンサーリンク
タイトルとURLをコピーしました