我想要实现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);
};
}
}
但是这种方法有一个缺点 - 用户会假设使用TextChanged
,这是在单次更改后引发的父级版本,并且不会考虑订阅FunkyTextChanged
事件。
是否可以使用TextChanged
事件?以某种方式隐藏父文件的TextChnaged来自FunkyTextBox
的用户并用它自己替换它?
答案 0 :(得分:3)
我会选择类似的东西:
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);
}
}
答案 1 :(得分:2)