0

3 つのフォームで構成されるプロジェクトを作成しています。1 つの親フォームは、どのフォームをロードするかを決定します。2 つの子フォームが少し似ているため、多くの検証は同じです。検証用のメソッドがあり、メソッドを共有するすべてのコントロールを制御する 1 つの検証イベントを持つ 1 つのメソッドだけを使用して、Validating event重複の量を最小限に抑える方法で呼び出されます。Validating events

これは、全体で広く使用されている私の方法の一例です。

public bool numValidation(string strNum)       
{
    if (!string.IsNullOrWhiteSpace(strNum))
    {
        int temp;
        if (int.TryParse(strNum, out temp))
        {
            MessageBox.Show("Phone Number is a valid input: " + temp);
            return true;
        }
        else
        {
            MessageBox.Show(temp + "Is not Valid input!!");                            
        }        
    }

    return false;
}

これは、多くの検証イベントの 1 つにすぎません。

private void txt_LndLine_Validating(object sender, CancelEventArgs e)
{
    numValidation(txt_LndLine.Text);
    txt_LndLine.Clear();
}

コードをクリーンアップして重複を最小限に抑える方法について、本当に疑問に思っています。前もって感謝します :)

4

2 に答える 2

2

共通のものがたくさんある場合、Declarative Validation はコードをきれいにするのに役立ちます。

MSDN - カスタム検証コンポーネント ライブラリによる Windows フォームの拡張

ヘルパー クラスを使用して検証計算関数を再利用し、同じ Sub で複数のコントロール検証イベントを処理することもできます。

最後になりましたが、IDataErrorInfo について読んでください。このインターフェースを使用すると、すべての検証アルゴリズムをビジネス クラスに入れることができます。

ErrorProvider コンポーネントとデータバインディングを使用して Winforms で正常に動作しています

于 2017-06-02T09:15:23.913 に答える
0

@Steveが解決し、より良いコードに感謝します。個別の静的クラスを作成しValidating Events、共通の機能を持つ両方のページですべてのメソッドを呼び出すだけで解決しました。

  private void txt_Fax_Validating(object sender, CancelEventArgs e)
        {
            Utillity.numValidation(txt_Fax.Text);
            txt_Fax.Clear();

        }

また、ユーティリティ クラスは次のとおりです。

public static bool numValidation(string strNum)
    {
        if (!string.IsNullOrWhiteSpace(strNum))
        {
            int temp;
            if (int.TryParse(strNum, out temp))
            {
                Console.WriteLine("Phone Number is a valid input: " + temp);
                return true;
            }
            else
            { Console.WriteLine(temp + "Is not Valid input!!"); }
        }
        return false;
    }
于 2017-06-02T09:19:07.360 に答える