C#NumericUpDown.OnValueChanged,它是如何改变的?

时间:2014-09-19 16:13:24

标签: c# .net numericupdown eventargs

我想问一下如何为现有的事件处理程序创建自定义EventArgs。

让我们说,我有NumericUpDown numericUpDown控件,我想要OnValueChanged事件的处理程序。双击visual studio中的ValueChanged可以制作这样的代码段

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。

2 个答案:

答案 0 :(得分: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));
    }

答案 1 :(得分:0)

您必须创建自己的数字向上控制,扩展.net版本,为您的事件定义委托类型,然后隐藏基本控件事件属性。

代表:

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

Event Args Class:

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

新的NumericUpDown类,使用' new'隐藏继承的事件:

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

查看here以获取有关如何提升自定义事件的说明,并here了解有关事件处理的其他信息。