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イベントの問題ではありません。ただし、プログラムの別のセクションでは、関数を呼び出しますCheckValidation();。しかし、私がそれを行うと、正しいものは呼び出されません。

明らかに空を削除すると

private void CheckValidation()
{

}

次に、「メソッド 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(null, EventArgs.Empty);と、オブジェクト、EventArgs パラメーターでオーバーロードが実行されます。

外部呼び出しが正しい数のパラメーターを渡してジョブを実行していることを確認してください。

個人的には、フォームイベントで使用されるメソッドを呼び出している場合this、送信者として渡しますが、使用しているモデルとオブジェクトのセキュリティに依存します (一部のオブジェクトは安全に渡すことができません)。

objectReference.CheckValidation(this, EventArgs.Empty);

また、メソッドを外部で呼び出す場合は、パブリックである必要があり、クラスのインスタンスから呼び出す必要があることに注意してください (メソッドが型名から呼び出す必要がある静的メソッドでない限り)。

于 2012-04-30T21:28:53.917 に答える
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 に答える