我想问一下如何使现有的事件处理程序定制的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的。
这可能是更容易只是标签的最后一个值。
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));
}
你必须创建自己的数字上下延伸的.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;
}
看这里了解如何提高你的自定义事件,并说明此有关事件处理的其他信息。