1

多くのフォームがあり、各フォームにいくつかのコントロールがある Windows フォーム アプリケーションを開発しています。Validation を実装するには、次のように各コントロールに「Validating」イベントを実装する必要があります。

    private void txtSalary_Validating(object sender, CancelEventArgs e)
    {
        if (txtSalary.Text.Trim() == String.Empty)
        {
            errorProvider1.SetError(txtSalary, "Salary is Required");
            e.Cancel = true;
        }
        else
            errorProvider1.SetError(txtSalary, "");

    }

一般的なことを行う方法はありますか?各コントロールの「検証」イベントを宣言的に定義するのではなく (フォーム デザイン ビュー - コントロール プロパティ内)、コードを介して一般的な方法でイベントをコントロールに関連付けることができますか?

4

3 に答える 3

0

検証用のセパレーターメソッドを作成し、ボタンクリックで呼び出すことができます。これを試してください:

private void SubmitButton_Click(object sender, EventArgs e)
    {
        if (ValidateControls()==0)
        {
           //Form is validated
        }
    }

    int ValidateControls()
    {
        int flag = 0;
        errorProvider1.Clear();
        if (txtAge.Text.Trim() == String.Empty)
        {
            errorProvider1.SetError(txtAge, "Age is required");
            flag = 1;
        }
        ............................................
        ............................................
       // validate all controls
        ............................................
        ............................................

        if (txtSalary.Text.Trim() == String.Empty)
        {
            errorProvider1.SetError(txtSalary, "Salary is required");
            flag = 1;
        }

        return flag;
    }
于 2013-03-22T09:25:23.703 に答える
0

フォームごとに 1 つのイベントのみを使用できます。例として、次のようなものを使用できます。

private void textboxValidation_Validating(object sender, CancelEventArgs e)
{
    TextBox tb = sender as TextBox;

    if (string.IsNullOrEmpty(tb.Text.Trim()))
    {
        errorProvider1.SetError(tb, tb.Tag +" is Required");
        e.Cancel = true;
    }
    else
        errorProvider1.SetError(tb, "");
}

これは、フォーム内のすべてのテキスト ボックスに使用できます。Tag プロパティの各テキスト ボックスに必要なものを追加するだけです。

すべてのフォームに対して 1 つのイベントを使用することもできます。複数のフォームに単一のイベント ハンドラーを設定するをご覧ください。

于 2013-03-22T09:22:20.270 に答える
0

すべての入力が同じタイプであり、各入力に対して同じ検証を実行しても問題がなく、コントロールに一貫した名前付ける場合、フォームのコンストラクターに次のコードのようなものを追加することで、coolmine の回答を拡張できます (初期化後)。

foreach(Control c in Controls)
{
    if(c is TextBox)
    {
        c.Tag = c.Name.Replace("txt","");
        c.Validating += textboxValidation_Validating;
    }
}
于 2013-03-22T18:10:27.323 に答える