1

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

可以说,我有NumericUpDown numericUpDown控制权,我想要它的OnValueChanged事件的处理程序。在 Visual Studio 中双击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 回答