概述
我已经研究过那里我知道有大量的信息为单个事件订阅多个事件处理程序但是,我无法将它应用于我的场景。几乎我有一个来自validation event
的{{1}}个textBox
处理程序中的30个,所有这些都是同样的过程。以下是其中一个处理程序:
private void txt_HouseName_Validating(object sender, CancelEventArgs e)
{ // Convert User input to TitleCase After focus is lost.
if (Utillity.IsAllLetters(txt_HouseName.Text) | !string.IsNullOrEmpty(txt_HouseName.Text))
{
errorProvider.Clear();
txt_HouseName.Text = Utillity.ToTitle(txt_HouseName.Text);
isValid = true;
}
else
{
errorProvider.SetError(txt_HouseName, "InValid Input, please reType!!");
isValid = false;
//MessageBox.Show("Not Valid");
}
}
我如何将代码最小化到这些代码行之一,并且只有这些事件处理程序之一? 我知道我应该在设计师代码中附加类似于
的内容this.txt_Fax.Validating += new System.ComponentModel.CancelEventHandler(this.txt_Fax_Validating);
但是因为它们是textboxes
我如何将1 validating events handlers
附加到我的所有TextBoxes
答案 0 :(得分:3)
您应该使用object sender
参数。因为发件人只是调用事件处理程序的对象。因此,拥有一个全局事件处理程序并将相同的处理程序附加到所有文本框。您的事件处理程序将如下所示。
private void txt_Validating(object sender, CancelEventArgs e)
{ // Convert User input to TitleCase After focus is lost.
//Cast the sender to a textbox so we do not need to use the textbox name directly
TextBox txtBx = (TextBox)sender;
if (Utillity.IsAllLetters(txtBx.Text) | !string.IsNullOrEmpty(txtBx.Text))
{
errorProvider.Clear();
txtBx.Text = Utillity.ToTitle(txtBx.Text);//using the cast TextBox
isValid = true;
}
else
{
errorProvider.SetError(txtBx, "InValid Input, please reType!!");
isValid = false;
//MessageBox.Show("Not Valid");
}
}
由于几乎每个事件都传递object sender
参数,因此可以轻松地对类似事件进行公共回调,只需检查发件人并执行特定操作。