由于 WPF 不包含NumericUpDown
从 中已知的控件WinForms
,因此我实现了自己的控件,并处理了上限和下限以及其他验证。
现在,WinForms
NumericUpDown
举办了一个ValueChanged
活动,也可以很好地实施它。我的问题是:如何将TextChangedEvent
a提升TextBox
到我的主应用程序中?Delegate
年代?还是有其他首选方法来实现这一点?
由于 WPF 不包含NumericUpDown
从 中已知的控件WinForms
,因此我实现了自己的控件,并处理了上限和下限以及其他验证。
现在,WinForms
NumericUpDown
举办了一个ValueChanged
活动,也可以很好地实施它。我的问题是:如何将TextChangedEvent
a提升TextBox
到我的主应用程序中?Delegate
年代?还是有其他首选方法来实现这一点?
我个人更喜欢使用 adelegate
来达到这个目的,因为我可以为它设置自己的输入参数。我会做这样的事情:
public delegate void ValueChanged(object oldValue, object newValue);
使用object
作为数据类型将允许您在NumericUpDown
控件中使用不同的数字类型,但是您每次都必须将其转换为正确的类型...我会觉得这有点痛苦,所以如果您的控件例如,只会使用一种类型,int
然后您可以将其更改delegate
为:
public delegate void ValueChanged(int oldValue, int newValue);
然后,您需要一个公共属性供控件的用户附加处理程序:
public ValueChanged OnValueChanged { get; set; }
像这样使用:
NumericUpDown.OnValueChanged += NumericUpDown_OnValueChanged;
...
public void NumericUpDown_OnValueChanged(int oldValue, int newValue)
{
// Do something with the values here
}
当然,除非我们真正从控件内部调用委托,否则我们不要忘记检查是否null
没有附加处理程序:
public int Value
{
get { return theValue; }
set
{
if (theValue != value)
{
int oldValue = theValue;
theValue = value;
if (OnValueChanged != null) OnValueChanged(oldValue, theValue);
NotifyPropertyChanged("Value"); // Notify property change
}
}
}