我需要一个自定义的NumericUpDown,其中事件ValueChanged应该传递CancelEventArgs而不是EventArgs,因为我希望能够在验证某些条件时取消编辑(例如,我有两个必须始终具有不同值的NumericUpDown)。如果我试图覆盖OnValueChanged,我显然会收到错误。
protected override void OnValueChanged(CancelEventArgs e)
{
if (e.Cancel)
return;
else
{
EventArgs args = (EventArgs)e;
base.OnValueChanged(args);
}
}
有办法做到这一点吗?
答案 0 :(得分:1)
我建议稍微更改一下取消行为的实现,而不是尝试通过事件参数传递Cancellation信息,您可以通过向自定义组件引入新事件来按需查询。这是一个简单的例子:
class CustomNumericUpDown : NumericUpDown
{
protected override void OnValueChanged(EventArgs e)
{
if (QueryCancelValueChanging != null && QueryCancelValueChanging())
return;
else
{
EventArgs args = (EventArgs)e;
base.OnValueChanged(args);
}
}
public event Func<bool> QueryCancelValueChanging;
}
在这种情况下,组件的主机可以订阅新事件,以决定是否取消“ValueChanged”事件。
编辑: 用法示例:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
CustomNumericUpDown nudTest = new CustomNumericUpDown();
nudTest.QueryCancelValueChanging += NudTest_QueryCancelValueChanging;
}
private bool NudTest_QueryCancelValueChanging()
{
return true;/* Replace by custom condition here*/
}
}
如果你以前从未做过如何创建和管理自定义事件,也许你需要学习如何创建和管理自定义事件,在网络上找到关于这个主题的教程应该很容易(like this one)