C#使用自定义事件参数覆盖事件
我需要一个自定义NumericUpDown,其中事件值Changed应传递CancelEventArgs而不是EventArgs,因为我希望在验证某些条件时能够取消编辑(例如,我有两个NumericUpDown,它们必须始终具有不同的值)。如果我试图覆盖OnValueChanged,显然会出错C#使用自定义事件参数覆盖事件,c#,events,event-handling,overriding,eventargs,C#,Events,Event Handling,Overriding,Eventargs,我需要一个自定义NumericUpDown,其中事件值Changed应传递CancelEventArgs而不是EventArgs,因为我希望在验证某些条件时能够取消编辑(例如,我有两个NumericUpDown,它们必须始终具有不同的值)。如果我试图覆盖OnValueChanged,显然会出错 受保护的覆盖无效OnValueChanged(CancelEventArgs e) { 如果(如取消) 返回; 其他的 { EventArgs args=(EventArgs)e; 基本值已更改(args
受保护的覆盖无效OnValueChanged(CancelEventArgs e)
{
如果(如取消)
返回;
其他的
{
EventArgs args=(EventArgs)e;
基本值已更改(args);
}
}
有办法做到这一点吗?我建议稍微更改一下取消行为的实现,而不是尝试通过事件参数传递取消信息,您可以通过向自定义组件引入新事件按需查询。下面是一个简单的例子:
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;
}
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*/
}
}
也许您需要学习如何创建和管理自定义事件如果您以前从未这样做过,那么在web上查找有关此主题的教程应该很容易()只需检查args是否为
CancelEventArgs
,就够了吗?因此,e
保持EventArgs
,您只需检查e是否为CancelEventArgs cea&&cea。Cancel
?@marcGravel:我相信条件“e为CancelEventArgs”将始终为false,因为在任何情况下,基本NumericUpDown类都会将“EventArgs”对象传递给onValueChanged方法,因为它是默认实现。在重写它时,您不能更改任何方法签名。对不起,我不知道如何使用它。你能举个例子吗?谢谢