手动触发事件

时间:2013-01-31 11:55:07

标签: c#

我的表单上有一些控件,我将(通过设计器)函数分配给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
        }
    }
}

因此,每个文本框都使用自己的代码进行验证。

2 个答案:

答案 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()。

就个人而言,我认为这就是你应该做的事情。