我的表单上有一些控件,我将(通过设计器)函数分配给Leave envent,如下所示:
textBox1.Leave += new System.EventHandler(f1);
textBox2.Leave += new System.EventHandler(f2);
textBox3.Leave += new System.EventHandler(f3);
这些函数对文本框执行一些验证。 请注意,并非所有文本框都调用相同的委托。
我现在需要的是能够在我想要的时候告诉他们“嘿,开火离开事件”。在我的情况下,我在开始的某个地方调用此函数:
private void validateTextBoxes()
{
foreach (Control c in c.Controls)
{
TextBox tb = c as TextBox;
if (tb != null)
{
// Fire the tb.Leave event to check values
}
}
}
因此,每个文本框都使用自己的代码进行验证。
答案 0 :(得分:5)
我认为你
private void ValidateTextBox(TextBox textBox)
{
//Validate your textbox here..
}
private void TextBox_Leave(object sender,EventArgs e)
{
var textbox = sender as TextBox;
if (textbox !=null)
{
ValidateTextBox(textbox);
}
}
然后连接离开事件
textBox1.Leave += new System.EventHandler(TextBox_Leave);
textBox2.Leave += new System.EventHandler(TextBox_Leave);
textBox3.Leave += new System.EventHandler(TextBox_Leave);
然后是您的初始验证码。
private void validateTextBoxes()
{
foreach (Control c in c.Controls)
{
TextBox tb = c as TextBox;
if (tb != null)
{
// No need to fire leave event
//just call ValidateTextBox with our textbox
ValidateTextBox(tb);
}
}
}
答案 1 :(得分:3)
作为当前方法的替代方案,您可能需要考虑使用Validating事件,这恰恰是出于此类事情。
如果您使用Validating,则可以使用ContainerControl.ValidateChildren()为所有子控件执行验证逻辑。请注意,Form类实现了ValidateChildren()。
就个人而言,我认为这就是你应该做的事情。