あなたがコントロールの値を確認したい場合は、ルールは、パリティ効果を達成するために用途を制御にかかわらず、そのうちの正常な思考に基づいて、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 { GET、SETを;} /// <概要> // / ベリファイ制御値が存在する認証される /// </要約> /// <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、alignRight?ErrorIconAlignment.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()) のリターン; } } }