2

再利用可能な方法で検証を作成しようとしています。

目的: 検証コントロールを再利用可能にします。

エラー プロバイダーは、動的に渡されるコントロールに関連付ける必要があり、実行時に設定またはクリアできます。

ユーザーが OnClick イベントを押すと、すべてのコントロールが独自のエラー プロバイダーで検証されます。

public bool IsFieldEmpty(ref TextBox txtControl, Boolean SetErrorProvider,string msgToShowOnError)
{
    ErrorProvider EP = new ErrorProvider();
    if (txtControl.Text == string.Empty)
    {
        if(SetErrorProvider==true)
            EP.SetError(txtControl, msgToShowOnError);
        return true;
    }
    else
    {
        if(SetErrorProvider==true)
            EP.Clear();
        return false;
    }
}

問題:

関数が呼び出されるたびに、私が望まない新しいエラープロバイダーオブジェクトが作成されます。すべてのコントロールに複数のエラー プロバイダーを含めることはできません。また、asp.net で行ったのと同じように検索して、ページ上のコントロールを検索できる必要があります。

これどうやってするの

4

2 に答える 2

3

ほとんどの場合、フォーム上に必要な ErrorProvider のインスタンスは 1 つだけです。

例えば

ErrorProvider errorProvider1 = new ErrorProvider();

または、ツールボックスからフォームにドラッグするだけです。

ErrorProvider を呼び出すときは、コントロールとメッセージを指定します。

errorProvider1.SetError (dateTimePicker1, "HEY BAD DATE");

エラーをクリアするには...

errorProvider1.SetError (dateTimePicker1, "");

そのため、ほとんどの場合、必要な ErrorProvider インスタンスは 1 つだけです。

于 2010-04-20T05:21:55.613 に答える
0

このように PropertyOnDemand を作成し、新しい ErrorProvider が必要になるたびにそのプロパティにアクセスします

    private ErrorProvider _ErrorProvider = null;

    //PropertyOnDemand
    private ErrorProvider ErrorProviders
    {
        get
        {
            if (_ErrorProvider == null)
            {
                _ErrorProvider = new ErrorProvider();
                return _ErrorProvider;
            }
            else
                return _ErrorProvider;
        }
    }
    public bool IsFieldEmpty(ref TextBox txtControl, Boolean SetErrorProvider, string msgToShowOnError)
    {

        if (txtControl.Text == string.Empty)
        {
            if (SetErrorProvider == true)
                ErrorProviders.SetError(txtControl, msgToShowOnError);
            return true;
        }
        else
        {
            if (SetErrorProvider == true)
                ErrorProviders.Clear();
            return false;
        }
    }
于 2013-06-21T08:46:12.383 に答える