DOBON.NETプログラミング道掲示板

[ 最新記事及び返信フォームをトピックトップへ ]

■34166 / inTopicNo.1)  numericUpDwonコントロールのvalue
  
□投稿者/ gese 一般人(1回)-(2019/02/26(Tue) 18:24:34)
  • アイコン環境/言語:[c#6.0] 
    分類:[.NET] 

    NumericUpDownコントロールのValueプロパティに値をセットしようとしました。

    Int16型の値はValueプロパティに登録されましたが、
    他の3つはValueプロパティに何も入らずに「0」と表示されてしまいます。
    なぜでしょうか?

    Int16 atai1 = 100;
    numericUpDown1.Value = atai1;

    Int32 atai2 = 200;
    numericUpDown1.Value = atai2;

    Int64 atai3 = 300;
    numericUpDown1.Value = atai3;

    int atai4 = 400;
    numericUpDown1.Value = atai4;

    こちらのサイトにプロパティ値がDecimalになっていると書いてあるので、
    キャストしてみましたが、上と同様にInt16型以外はValueが「0」になってしまいます。こちらもなぜキャストができないのでしょうか?キャストする方法はあるんでしょうか?

    https://docs.microsoft.com/ja-jp/dotnet/api/system.windows.forms.numericupdown.value?view=netframework-4.7.2#System_Windows_Forms_NumericUpDown_Value
    //Int16 atai1 = 100;
    //numericUpDown1.Value = (decimal)atai1;

    //Int32 atai2 = 200;
    //numericUpDown1.Value = (decimal)atai2;

    //Int64 atai3 = 300;
    //numericUpDown1.Value = (decimal)atai3;

    //int atai4 = 400;
    //numericUpDown1.Value = (decimal)atai4;
マルチポストを報告
違反を報告
引用返信 削除キー/
■34167 / inTopicNo.2)  Re[1]: numericUpDwonコントロールのvalue
□投稿者/ 魔界の仮面弁士 大御所(1206回)-(2019/02/26(Tue) 18:34:06)
  • アイコン2019/02/26(Tue) 21:35:19 編集(投稿者)

    No34166に返信(geseさんの記事)
    > 環境/言語:[c#6.0] 
    6.0 ということは、最低でも Visual Studio 2015 以上ということですね。


    > NumericUpDownコントロールのValueプロパティに値をセットしようとしました。
    Value プロパティは decimal 型ですので、
    decimal 型の値をセットするべきではありますが、
    整数型から decimal 型への変換は暗黙的に行われるので、
    整数値を代入したとしても、本来は問題無いはずです。


    > 他の3つはValueプロパティに何も入らずに「0」と表示されてしまいます。
    まずは numericUpDown1 の Maximum プロパティを確認してみてください。
    (初期値は 100 です)

    たとえば、Maximum = 100 のままだと、100 よりも大きい値は
    代入できませんので、その場合、Value 値が書き換わることなく、
    直前の値のままになってしまっているのではないでしょうか。


    本来であれば、Minimum〜Maximum の範囲外の値を Value にセットすると
    例外で停止するはずですが、64bit 環境(かつ Windows 8.1 未満)において、
    Form の Load イベント内に記述していた場合、例外が発生しても
    Visual Studio 側で拾えないので、例外を見落としてしまっているのかも。



    > キャストする方法はあるんでしょうか?

    キャストの仕方はそれで正しいです。
    ちなみに末尾に "m" または "M" を付けた場合、decimal 型のリテラルを意味します。

     numericUpDown1.Value = 5.67m;

    小数値を指定する場合は、DecimalPlaces プロパティの設定も忘れずに。



    蛇足ですが、decimal では桁数も管理されるようになっています。
    そのため下記の 2 つは、数値としては同じ値ながらも、
    ToString 時の結果が異なることになります。

    decimal a = 10.0m;
    decimal b = 10.0000m;
    label1.Text = a.ToString();
    label2.Text = b.ToString();
違反を報告
引用返信 削除キー/
■34168 / inTopicNo.3)  Re[2]: numericUpDwonコントロールのvalue
□投稿者/ gese 一般人(2回)-(2019/02/27(Wed) 09:54:03)
  • アイコン
    >6.0 ということは、最低でも Visual Studio 2015 以上ということですね。
    
    環境はWin7のVS 2015です。
    
    >まずは numericUpDown1 の Maximum プロパティを確認してみてください。
    
    ここが問題でした。Maximumが100でした・・・
    
    >本来であれば、Minimum〜Maximum の範囲外の値を Value にセットすると
    >例外で停止するはずですが、64bit 環境(かつ Windows 8.1 未満)において、
    >Form の Load イベント内に記述していた場合、例外が発生しても
    >Visual Studio 側で拾えないので、例外を見落としてしまっているのかも。
    
    おっしゃる通り64ビットの環境でWin7です。そしてLoad イベントに書いてあります。
    試しにMaximumを1000にして以下のコードを実行したら、ボタン押下時に例外が発生しました。
    
       private void Form1_Load(object sender, EventArgs e)
            {
                Int64 atai3 = 3000;
                numericUpDown1.Value = (decimal)atai3;
            }
    
            private void button1_Click(object sender, EventArgs e)
            {
                Int64 atai3 = 4000;
                numericUpDown1.Value = (decimal)atai3;
            }
    
    >ちなみに末尾に "m" または "M" を付けた場合、decimal 型のリテラルを意味します。
    
    なるほど、これは知りませんでした。
    
    勉強になりました。ありがとうございます。

解決み!
違反を報告
引用返信 削除キー/



トピック内ページ移動 / << 0 >>

このトピックに書きこむ

Mode/  Pass/


- Child Tree -