可以在第二次覆盖自定义控制调用的onleave吗?

时间:2015-09-19 11:22:19

标签: c# winforms

首先,我们需要覆盖一个自定义控件,以便在该CaseingTxtBox离开时生成文本框文本Titlecase,第二次我们在表单中使用该离开事件来调用某个方法。这可能吗?

我们尝试了以下代码,但每次CaseingTxtBox的{​​{1}}事件都会接到来电,但没有Onleave

的电话

我制作了一个自定义控件,为我的文本框添加了正确的大小写并继承自firstNameTextBox_Leave(),我们使用文本框的TextBox事件来创建自定义文本框的文本标题大小写。

Leave

我们在表单中使用public class CaseingTxtBox : TextBox { protected override void OnLeave(EventArgs e) { Text = CultureInfo.CurrentCulture.TextInfo.ToTitleCase(Text.ToLower()); //first call this event for make text titlecase } } 控件来使文本正确,并且效果非常好。我们还使用该控件的CaseingTxtBox事件来调用方法,但不调用该方法。

Leave

1 个答案:

答案 0 :(得分:2)

您正在覆盖该方法,但您没有在处理程序中调用base.OnLeave(e),因此永远不会触发事件。

documentation对此很清楚:

  

对继承人的说明:
  在派生类中重写OnLeave时,请务必调用基类的OnLeave方法,以便已注册的委托接收事件。

所以你需要覆盖这样的方法

protected override void OnLeave(EventArgs e)
{
    base.OnLeave(e);

    Text = CultureInfo.CurrentCulture.TextInfo.ToTitleCase(Text.ToLower());
}

这会导致被覆盖的OnLeave方法和与Leave相关联的任何可能事件被调用。