数値のみが入力できる 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 | 項目名 | Text | name | 部品 |
1 | 少数部なし(見出し) | 少数部なし | label1 | Label |
2 | 少数部なし(入力欄) | デフォルト(設定なし) | numericUpDown1 | NumericUpDown |
3 | 少数部あり(見出し) | 空 | label1 | Label |
4 | 少数部あり(入力欄) | デフォルト(設定なし) | numericUpDown2 | NumericUpDown |
5 | Console出力ボタン | Console出力 | button1 | Button |
プログラミング
言語: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、文字列の値は全て同じです。
以上です。