delegate
独自の入力パラメーターを設定できるため、個人的にはこの目的でを使用することを好みます。私はこのようなことをします:
public delegate void ValueChanged(object oldValue, object newValue);
データ型として使用object
すると、コントロールでさまざまな数値型を使用できますが、NumericUpDown
毎回正しい型にキャストする必要があります...これは少し面倒だと思います。int
たとえば、1 つのタイプのみを使用する場合は、次のように変更できますdelegate
。
public delegate void ValueChanged(int oldValue, int newValue);
次に、コントロールのユーザーがハンドラーをアタッチするためのパブリック プロパティが必要になります。
public ValueChanged OnValueChanged { get; set; }
次のように使用します。
NumericUpDown.OnValueChanged += NumericUpDown_OnValueChanged;
...
public void NumericUpDown_OnValueChanged(int oldValue, int newValue)
{
// Do something with the values here
}
もちろん、実際にコントロール内からデリゲートを呼び出さない限り、それは良くありnull
ません。ハンドラーがアタッチされていない場合にチェックすることを忘れないようにしましょう。
public int Value
{
get { return theValue; }
set
{
if (theValue != value)
{
int oldValue = theValue;
theValue = value;
if (OnValueChanged != null) OnValueChanged(oldValue, theValue);
NotifyPropertyChanged("Value"); // Notify property change
}
}
}