可以将自定义控件调用的onleave重写为第二次

本文关键字:onleave 重写 第二次 调用 自定义控件 | 更新日期: 2023-09-27 18:13:41

首先,我们需要重写一个自定义控件,使文本框texttextcase位于CaseingTxtBox的左侧,第二次,我们在表单中使用该leave事件来调用一些方法。这可能吗?

我们尝试了下面的代码,但是我们每次都对CaseingTxtBoxOnleave事件进行调用,但对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事件来调用一个方法,但该方法没有被调用。

this.firstNameTextBox.Leave += new System.EventHandl(this.firstNameTextBox_Leave);
 private void firstNameTextBox_Leave(object sender, EventArgs e)
{
    MessageBox.Show("hello");
    //second time call this event for call some method or propmt   messagebox onleave of CaseingTxtBox .
}

可以将自定义控件调用的onleave重写为第二次

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

文档对此非常清楚:

给继承者的说明:
当在派生类中重写OnLeave时,一定要调用基类的OnLeave方法,以便注册的委托接收到事件。

所以你需要重写这个方法,像这样
protected override void OnLeave(EventArgs e)
{
    base.OnLeave(e);
    Text = CultureInfo.CurrentCulture.TextInfo.ToTitleCase(Text.ToLower());
}

这将导致您的覆盖OnLeave方法和任何可能连接到Leave的事件被调用。