ExtendedNumericUpDown.h

#pragma once

namespace Core
{
    /// 拡張アップダウン コントロール
    public ref class ExtendedNumericUpDown : public System::Windows::Forms::NumericUpDown
    {
    // Attribute ===========================================================
    private:
        System::EventHandler^ m_valueChangedEventHandler;   ///< 値変更のイベントハンドラ


    // Property ------------------------------------------------------------
    public:
        /// 値
        property double Number
        {
            double get()
            {
                return System::Decimal::ToDouble( this->Value );
            }
            void set( double value )
            {
                // 値の設定時にイベントから呼び出されないように、それを削除する
                this->ValueChanged -= m_valueChangedEventHandler;

                // キャストして値を設定する
                this->Value = System::Decimal( value );

                // ... 削除したイベントに 再び登録する
                this->ValueChanged += m_valueChangedEventHandler;
            }
        }

        /// 値変更のイベントハンドラ
        property System::EventHandler^ ValueChangedEventHandler
        {
            void set( System::EventHandler^ value )
            {
                m_valueChangedEventHandler = value;

                // 値変更イベントに追加する
                this->ValueChanged += value;
            }
        }

    };

    /// @note
    /// アップダウン コントロールに以下の項目を拡張している。
    /// 1. Decimalではなく double型による値の設定
    /// 2. 変更イベントを伴わない 値の変更
}