我想问一下如何为现有的事件处理程序创建自定义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。
答案 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;
}