C#NumericUpDown.OnValueChanged,它是怎么改变?(C# NumericU

2019-10-21 00:35发布

我想问一下如何使现有的事件处理程序定制的EventArgs。

比方说,我有NumericUpDown numericUpDown控制,我想为它的处理程序OnValueChanged事件。 双击到ValueChanged在Visual Studio使得网页摘要

private void numericUpDown_ValueChanged(object sender, EventArgs e)
{

}

不过,我想知道它是如何改变(如+5,-4.7),但普通EventArgs没有这个信息。 也许Decimal change = Value - Decimal.Parse(Text)会做的伎俩(因为延迟的文字变化),但是这是丑陋的方式和每一次可能无法正常工作。

我想我应该让我自己的EventArgs这样

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

然后以某种方式覆盖NumericUpDown.OnValueChanged事件产生我用正确的信息EventArgs的。

Answer 1:

这可能是更容易只是标签的最后一个值。

    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));
    }


Answer 2:

你必须创建自己的数字上下延伸的.NET版本控制,定义委托类型的事件,然后隐藏基控件事件属性。

代表:

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

事件的args类:

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

新的NumericUpDown类,隐藏与“新”的继承事件:

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

看这里了解如何提高你的自定义事件,并说明此有关事件处理的其他信息。



文章来源: C# NumericUpDown.OnValueChanged, how it was changed?