可以将自定义控件调用的onleave重写为第二次
本文关键字:onleave 重写 第二次 调用 自定义控件 | 更新日期: 2023-09-27 18:13:41
首先,我们需要重写一个自定义控件,使文本框texttextcase位于CaseingTxtBox的左侧,第二次,我们在表单中使用该leave事件来调用一些方法。这可能吗?
我们尝试了下面的代码,但是我们每次都对CaseingTxtBox
的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
事件来调用一个方法,但该方法没有被调用。
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 .
}
您正在重写方法,但您没有在处理程序中调用base.OnLeave(e)
,因此事件永远不会触发。
文档对此非常清楚:
所以你需要重写这个方法,像这样给继承者的说明:
当在派生类中重写OnLeave时,一定要调用基类的OnLeave方法,以便注册的委托接收到事件。
protected override void OnLeave(EventArgs e)
{
base.OnLeave(e);
Text = CultureInfo.CurrentCulture.TextInfo.ToTitleCase(Text.ToLower());
}
这将导致您的覆盖OnLeave
方法和任何可能连接到Leave
的事件被调用。