1

既存のイベント ハンドラーのカスタム EventArgs を作成する方法をお聞きしたいと思います。

私がコントロールを持っていて、そのイベントNumericUpDown numericUpDownのハンドラーが必要だとしましょう。OnValueChangedビジュアルスタジオでダブルクリックするとValueChanged、このようなスニペットが作成されます

private void numericUpDown_ValueChanged(object sender, EventArgs e)
{

}

ただし、どのように変更されたのか(+5、-4.7など)を知りたいのですが、plainEventArgsにはこの情報がありません。(テキストの変更が遅れるため) うまくいくかもしれDecimal change = Value - Decimal.Parse(Text)ませんが、それは醜い方法であり、毎回うまくいくとは限りません。

このように独自の EventArgs を作成する必要があると思います

class ValueChangedEventArgs : EventArgs
{
    public Decimal Change { get; set; }
}

そして、どういうわけかNumericUpDown.OnValueChangedイベントをオーバーライドして、適切な情報で EventArgs を生成します。

4

2 に答える 2

2

最後の値にタグを付ける方がずっと簡単かもしれません。

    private void numericUpDown1_ValueChanged(object sender, EventArgs e) {
        NumericUpDown o = (NumericUpDown)sender;
        int thisValue = (int) o.Value;
        int lastValue = (o.Tag == null) ? 0 : (int) o.Tag;
        o.Tag = thisValue;
        MessageBox.Show("delta = " + (thisValue - lastValue));
    }
于 2014-09-19T16:23:11.727 に答える
0

.net バージョンを拡張する独自の数値アップ ダウン コントロールを作成し、イベントのデリゲート タイプを定義してから、ベース コントロールのイベント プロパティを非表示にする必要があります。

代理人:

public delegate void MyOnValueChangedEvent(object sender, ValueChangedEventArgs args);

イベント引数クラス:

class ValueChangedEventArgs : EventArgs
{
    public Decimal Change { get; set; }
}

新しい NumericUpDown クラス。継承されたイベントを「new」で非表示にします。

public class MyNumericUpDown : NumericUpDown
{
    public new event MyOnValueChangedEvent OnValueChanged;
}

カスタム イベントの発生方法についてはこちらを、イベント処理の詳細についてはこちらをご覧ください。

于 2014-09-19T16:24:02.170 に答える