C# 用我自己的事件替换父类事件
我想实现一个新版本的C# 用我自己的事件替换父类事件,c#,C#,我想实现一个新版本的TextBox,我们称之为FunkyTextBox,它只会在每三次文本更改后引发TextChanged事件 如果我只想为此引发另一个事件,让我们称之为FunkyTextChanged,那么实现非常简单: class FunkyTextBox : TextBox { int counter = 0; int MAX_CHANGES = 3; public event EventHandler FunkyTextChanged; public F
TextBox
,我们称之为FunkyTextBox
,它只会在每三次文本更改后引发TextChanged
事件
如果我只想为此引发另一个事件,让我们称之为FunkyTextChanged
,那么实现非常简单:
class FunkyTextBox : TextBox
{
int counter = 0;
int MAX_CHANGES = 3;
public event EventHandler FunkyTextChanged;
public FunkyTextBox()
{
this.TextChanged += (s, e) =>
{
if (++counter < MAX_CHANGES)
return;
counter = 0;
if (FunkyTextChanged != null)
FunkyTextChanged(this, null);
};
}
}
class FunkyTextBox:TextBox
{
int计数器=0;
int MAX_变化=3;
公共事件事件处理程序FunkyTextChanged;
公共FunkyTextBox()
{
this.TextChanged+=(s,e)=>
{
如果(++计数器<最大值变化)
返回;
计数器=0;
if(FunkyTextChanged!=null)
FunkyTextChanged(此为空);
};
}
}
但这种方法有一个缺点-用户会假设使用TextChanged
,这是在一次更改后提出的家长版本,不会考虑订阅FunkyTextChanged
事件
是否可以为此使用
TextChanged
事件?以某种方式向FunkyTextBox
的用户隐藏家长的文本,并将其替换为自己的 只需用您的实现覆盖OnTextChanged
受保护的方法即可
protected override void OnTextChanged(TextChangedEventArgs e){
// your code here
}
由于此方法是虚拟的,如果使用自定义文本框,则应调用此方法
有关WinForms和
对于WPF。我会选择以下内容:
class FunkyTextBox : TextBox
{
int counter = 0;
int MAX_CHANGES = 3;
public FunkyTextBox()
{
}
protected override void OnTextChanged(EventArgs e)
{
if (++counter < MAX_CHANGES)
return;
counter = 0;
base.OnTextChanged(e);
}
}
class FunkyTextBox:TextBox
{
int计数器=0;
int MAX_变化=3;
公共FunkyTextBox()
{
}
受保护的覆盖void OnTextChanged(事件参数e)
{
如果(++计数器<最大值变化)
返回;
计数器=0;
base.OnTextChanged(e);
}
}
事件一般,但Windows窗体在这种情况下,目标是根本不更改FunkyTextChanged
,而是让用户订阅TextChanged
,并在3次更改后接收