调用错误的函数或方法没有重载

时间:2012-04-30 21:18:41

标签: c# function methods

我有一个函数,用于在用户浏览目录后验证某些文本框的内容。

private void CheckValidation(object sender, EventArgs e)
{
    bool OK = true;
    if (PhotograherNumber.Text == string.Empty || errorProvider1.GetError(PhotograherNumber)!="")
    {
        OK = false;
    }
    if (EventNumber.Text == string.Empty || errorProvider1.GetError(EventNumber)!="")
    {
        OK = false;
    }
    if (OK)
    {
        EnableProcessNow();
    }
    else
    {
        DisableProcessNow();
    }

}

这很有效。

但后来我在文本框中添加了Validated事件要调用的函数。

一旦我做到了,就创造了这个:

private void CheckValidation()
{

}

同样,Validated事件也没有问题。但是,在我的程序的另一部分中,我调用函数CheckValidation();。但是,当我这样做时,它并没有称为正确的。

显然,如果我删除空

private void CheckValidation()
{

}

然后我收到错误'没有Overload for Method CheckValidation需要0个参数'。

那么如何从我的代码中调用正确的CheckValidation,但仍然确保我仍然可以从事件中调用它?

3 个答案:

答案 0 :(得分:4)

根据我对您的问题的理解,您希望运行相同的方法,但两者都能够在没有参数的情况下手动调用它并允许它成为事件处理程序吗?

如果你想从代码中调用处理程序方法,你只需要调用CheckValidation(null, EventArgs.Empty); - 但是更好的解决方案是将代码置于CheckValidation()重载(没有参数)并从中调用处理程序:

private void CheckValidation(object sender, EventArgs e)
{
    CheckValidation();
}

private void CheckValidation()
{
    // Code here
}

答案 1 :(得分:0)

如果您没有将CheckValidation方法用作某个事件处理程序,那么只需从此函数中删除参数即可。您可以像CheckValidation();一样调用它。如果此方法用作某个事件处理程序,那么还要从CheckValidation方法中删除参数(无论如何你不使用它们),只需在该事件处理程序中调用它:

private void SomeEventHandler(object sender, EventArgs e)
{
    CheckValidation();
}

另请考虑从您的方法中删除布尔标志:

private void CheckValidation()
{
    if (PhotograherNumber.Text == "" || errorProvider1.GetError(PhotograherNumber)!= "")
    {
        DisableProcessNow();
        return;
    }

    if (EventNumber.Text == "" || errorProvider1.GetError(EventNumber)!= "")
    {
         DisableProcessNow();
         return;
    }

    EnableProcessNow();
}

继续前进,我创建了一个描述实际检查内容的方法:

private void CheckValidation()
{
    if (!IsAllInputValid())
    {
        DisableProcessNow();
        return;
    }

    EnableProcessNow();
}

private bool IsAllInputValid()
{
    if (!HasValidInput(PhotograherNumber))
        return false;

    if (!HasValidInput(EventNumber))
        return false;

    return true;
}

private bool HasValidInput(TextBox textBox)
{
    if (String.IsNullOrEmpty(textBox.Text)
        return false;

    return errorProvider1.GetError(textBox) != "";
}

答案 2 :(得分:0)

如果你致电CheckValidation();,它将运行没有参数的过载。如果你调用CheckValidation(null, EventArgs.Empty);,它将使用一个对象EventArgs参数运行重载。

确保外部呼叫传递正确数量的参数才能完成工作。

就个人而言,如果我正在调用表单事件使用的方法,我会将this作为发送方传递,但这取决于您使用的模型和对象安全性(某些对象传递不安全)

objectReference.CheckValidation(this, EventArgs.Empty);

另请注意,如果您在外部调用该方法,则它必须是公共的,并且必须从该类的实例中调用(除非该方法是静态的,必须从类型名称调用该方法)。