0

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

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同样,这对Event来说不是问题。但是,在我程序的另一部分中,我调用了 function CheckValidation();。但是当我这样做时,它不会调用正确的。

显然,如果我删除空的

private void CheckValidation()
{

}

然后我收到错误“方法检查验证没有重载需要 0 个参数”。

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

4

3 回答 3

4

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

如果您想从代码中调用处理程序方法,您可以调用CheckValidation(null, EventArgs.Empty);- 但是更好的解决方案是将代码放入CheckValidation()重载(不带参数)并从处理程序调用:

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

private void CheckValidation()
{
    // Code here
}
于 2012-04-30T21:23:47.977 回答
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) != "";
}
于 2012-04-30T21:21:46.670 回答
0

如果您调用CheckValidation();它将运行不带参数的重载。如果调用CheckValidation(null, EventArgs.Empty);它,它将使用对象、EventArgs 参数运行重载。

确保您的外部调用传递了正确数量的参数来完成这项工作。

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

objectReference.CheckValidation(this, EventArgs.Empty);

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

于 2012-04-30T21:28:53.917 回答