DevExpress社は、パリティを達成するための拡張メソッドを制御します

あなたがコントロールの値を確認したい場合は、ルールは、パリティ効果を達成するために用途を制御にかかわらず、そのうちの正常な思考に基づいて、DXValidationProvider DXErrorProviderコントロールとコントロールを使用する必要性、DevExpress社のコントロールを検証するために、各制御のために検証する必要がありますバインディング、この中には、一度、すべてのための効果を達成するための拡張メソッドを記述します。

次のようにコードを広めます:

    使用してシステムを。
    使用してSystem.Collections.Genericを。
    使用してSystem.Linqのを。
    使用してSystem.Textのを。
    使用してSystem.Threading.Tasksを。
    使用してDevExpress.XtraEditors.DXErrorProviderを。
    使用してのSystem.Windows.Formsを。
     
    名前空間ValidateForm 
    { 
    /// <要約> 
    /// 验证值是否存在的验证规则
     /// </要約> 
    パブリック クラスCustomValidationRule:のValidationRule 
        { 
    公共 CustomValidationRule(機能< オブジェクトブール >  validationFunction)
            {
    この .ValidateFunction = validationFunction; 
            } 
     
    /// <要約> 
    ///を取得または認証方法設定
     /// </要約> 
    のFunc < オブジェクトBOOL > ValidateFunction { GETSETを;} 
     
    /// <概要> 
    // / ベリファイ制御値が存在する認証される
     /// </要約> 
    /// <PARAM NAME =「コントロール」> 検証するコントロール。</ param>の
    /// <PARAM NAME = "値"> コントロールを検証する値</ param>の
    /// <戻り値> 値が既に存在する場合、それはfalseを返します; true、そうでありません。<
     オーバーライド (System.Windows.Forms.Control制御、検証対象値)
            { 
    場合この .ValidateFunction == NULL スロー 新しい InvalidOperationExceptionが(" 必须设置ValidateFunctionの属性" );
    戻りValidateFunction(値)。
            } 
        } 
     
    パブリック 静的 クラスDXValidationExtension 
        { 
     
    静的辞書< int型、辞書< INT、リスト<DXValidationProvider >>> providerDictionary。
     
    静的DXValidationExtension() 
            { 
    providerDictionary = newDictionary < INT、辞書< INT、リスト<DXValidationProvider >>> (); 
            } 
     
    /// <まとめ> 
    /// 容器を制御するため、制御を検証するために検証し、検証結果を返すことができます。
    /// </要約> 
    /// <PARAM NAME = "コンテナ"> コントロールコンテナ</ PARAM> 
    /// <戻り値> </戻り> 
    パブリック 静的 BOOL DXValidate(このコントロールコンテナ)
            { 
    BOOLのisValid = trueに ; / / 検証結果
     
    のforeach(vardictinGetProviderDictionary(コンテナ))
                { 
    foreachのVARのプロバイダindict.Value)
                    { 
    IF(!provider.Validate()は)
                        { 
    // いずれか検証されていない場合、検証結果がfalseに設定されている 
    =はisValid falseに;
     // コントロールを検証しますルールのいずれかが、他のルールは、制御検証しないように、即時の出口を検証に合格しなかった
    ブレーク; 
                        } 
                    } 
                } 
    戻り、のisValidを
            } 
     
    パブリック 静的 ボイド(CustomValidation このコントロールコンテナ、制御controlToValidate、ストリングERRORTEXT、
    のFunc < オブジェクトBOOL > 検証)
            { 
    CustomValidation(容器、controlToValidate、ERRORTEXT、検証、)。
            } 
     
    プライベート 静的 ボイド CustomValidation(このコントロールコンテナ、コントロールcontrolToValidate、ストリング ERRORTEXT、のFunc < オブジェクトブール >検証、BOOL alignRight、BOOL manualValidation)
            { 
    //。获得带验证的控件的DXValidationProvider集合
    のvar辞書=GetProviderDictionary(容器)
    VaRのプロバイダ= GetProvider(controlToValidate、辞書)。
    VaRのプロバイダ= 新しいDXValidationProvider(); 
    provider.ValidationMode = manualValidation?ValidationMode.Manual:ValidationMode.Auto。
    provider.SetIconAlignment(controlToValidate、alignRightErrorIconAlignment.MiddleRight:ErrorIconAlignment.MiddleLeft)。
     
    provider.SetValidationRule(controlToValidate、newCustomValidationRule(検証)
                { 
    ERRORTEXT = ERRORTEXT、
                })。
     
    // 将DXValidationProvider添加到待验证控件的DXValidationProvider集合中。
    providers.Add(プロバイダ); 
            } 
     
    /// <まとめ> 
    /// 戻り検証制御DXValidationProviderを設定することが
     /// </要約> 
    /// <PARAM NAME = "ControlToValidate"> 認証する制御</ PARAM> 
    / // <PARAM NAME = "辞書"> 辞書テーブル検証コントロール保留</ param>の
    /// </返します> <を返す> 
    プライベート 静的リスト<DXValidationProvider> GetProvider(制御ControlToValidate、辞書< int型、リスト<DXValidationProvider>を> 辞書)
            { 
    VARのキー= controlToValidate.GetHashCode()。
    (dictionary.ContainsKey(キー))
    もし返す辞書[キー]を。
    他に
                { 
    VARのプロバイダ= newList <DXValidationProvider> (); 
    dictionary.Add(キー、プロバイダ); 
    リターン・プロバイダ; 
                } 
            } 
     
    /// <要約> 
    /// 返回空间容器的待验证控件字典
     /// </要約>は
    /// <PARAM NAME = "コンテナ"> </ PARAM> 
    /// <戻る> </復帰> 
    プライベート 静的辞書< int型、リスト<DXValidationProvider >> GetProviderDictionary(コントロールコンテナ)
            { 
    VARのキー= コンテナー。
    もし(providerDictionary.ContainsKey(キー))
                { 
    戻り   providerDictionary [キー]。
                } 
    
                { 
    VARのプロバイダ= newDictionary < INT、リスト<DXValidationProvider >> (); 
    providerDictionary.Add(キー、プロバイダ); 
    リターン・プロバイダ; 
                } 
            } 
        } 
    }

 

次のようにプログラムの呼び出し元のコード例は以下のとおりです。

    使用してシステムを。
     
    使用してSystem.Collections.Genericを。
     
    使用してSystem.ComponentModelを。
     
    使用してSystem.Dataを。
     
    使用System.Drawingを。
     
    使用してSystem.Linqのを。
     
    使用してSystem.Textのを。
     
    使用してSystem.Threading.Tasksを。
     
    使用してのSystem.Windows.Formsを。
     
    名前空間ValidateForm 
     
    { 
     
    パブリック 部分 クラスをForm1:フォーム
     
        { 
     
    公共のForm1()
     
            { 
     
    のInitializeComponent(); 
     
    InitValidateRoles(); 
     
            } 
     
    プライベート 無効InitValidateRoles()
     
            { 
     
    この .CustomValidation(calcEdit1、" 请输入大于0小于20的值"、値=> 
     
                { 
     
    returnConvert.ToInt32(calcEdit1.EditValue) > && Convert.ToInt32(calcEdit1.EditValue)< ; 
     
                }); 
     
            } 
     
    プライベート 無効 simpleButton1_Click(オブジェクト送信者、EventArgsの電子)
     
            { 
     
    場合(!この.DXValidate())
     
    のリターン;     
     
            } 
     
        } 
     
    }

 

おすすめ

転載: www.cnblogs.com/MuNet/p/11487878.html