NumericUpDown

プロパティ

プロパティ 内容 既定値
string Text コントロールに表示されるテキスト  
decimal Value コントロールに割り当てる値  
decimal Maximum 最大値 100
decimal Minimum 最小値 0
decimal Increment ボタンがクリックされたときに増減する量 1
bool ThousandsSeparator trueならば、桁区切りを表示する false
bool Hexadecimal trueならば、16進数形式で表示する false
int DecimalPlaces 小数部の桁数 0
bool UserEdit trueならば、ユーザーがTextプロパティを変更した  
       

メソッド

UpdateEditTexts()

UpdateEditTexts()をオーバーライドすることで、書式など表示方法を変更できます。

protected override void UpdateEditText ();
NumericUpDown.UpdateEditText Method (System.Windows.Forms) | Microsoft Learn

ユーザーにテキストを書き換えられた場合にも対応するには、ParseEditText()も実装します。このメソッドはオーバーライドできないためnewで隠蔽し、検証が必要なときにそれが呼ばれるようにValidateEditText()をオーバーライドします。また上下ボタンが操作されたときにもパースされるように、UpButton()とDownButton()もオーバーライドします。

class MyNumericUpDown : NumericUpDown
{
    protected override void UpdateEditText()
    {
        // 現在の値がユーザーによって編集されていたら、処理前にパースする
        if (UserEdit) ParseEditText();

        // Textプロパティを指定の書式に変更する
        Text = Value + "kb";
    }

    protected new void ParseEditText()
    {
        Debug.Assert(UserEdit == true);
        try
        {
            // Textプロパティをパースし、Valueを更新する
            Value = Decimal.Parse(Text.Replace("kb", ""));
        }
        finally
        {
            UserEdit = false;
        }
    }

    protected override void ValidateEditText()
    {
        // オーバーライドした、このクラスのメソッドでパースする
        ParseEditText();
        UpdateEditText();
    }

    public override void UpButton()
    {
        if (UserEdit) ParseEditText();
        base.UpButton();
    }

    public override void DownButton()
    {
        if (UserEdit) ParseEditText();
        base.DownButton();
    }
}
c# - Having text inside NumericUpDown control, after the number - Stack Overflow winforms - How To Display "0000" instead "0" in NumericUpDown in C# - Stack Overflow NumericUpDown.cs

書式を変更することで表示される文字数が変化すると、AutoSizeでサイズが自動的に変更されるときにサイズが不一致となります。そのときはGetPreferredSize()もオーバーライドして、サイズを調整します。

イベント

イベント 発生タイミング
EventHandler ValueChanged Valueプロパティが変更されたとき
EventHandler TextChanged Textプロパティが変更されたとき。ただしTextの検証に失敗したときは発生しない
     

ValueChanged

コードまたはユーザによってValueプロパティが変更されたときに発生します。上または下ボタンが押されたときは即座に、テキストが変更されたときはENTERが押されるかフォーカスが外れたときに発生します。一方でテキストが変更され上下のボタンが押されたときは、入力された値とボタンで増減した値で2度イベントが発生します。つまり"1"に変更されてから上ボタンが押されると、最初のイベント発生時点ではValueは1で、その直後にイベントが発生しIncrement分だけ加算され2となります。

Microsoft Learnから検索