0

NumericUpDownWPF にはから知られているコントロールが含まれていないためWinForms、独自に実装し、値の上限と下限、およびその他の検証を処理します。

さて、こちらも実装するといいイベントがWinForms NumericUpDown開催されました。ValueChanged私の質問は: どうすればTextChangedEventaTextBoxをメイン アプリケーションに持ち上げることができますか? Delegate?または、これを実装するための他の好ましい方法はありますか?

4

1 に答える 1

2

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
        }
    }
}
于 2013-09-30T13:39:48.453 に答える