using DevExpress.XtraEditors.DXErrorProvider; using System; using System.Collections.Generic; using System.Windows.Forms; namespace HL_FristAidPlatform_Public { public static class DXValidationExtension { private static Dictionary>> providerDictionary; static DXValidationExtension() { providerDictionary = new Dictionary>>(); } /// ///对控件容器中的待验证控件进行验证,并返回验证结果。 /// ///控件容器 /// public static bool DXValidate(this Control container) { bool isValid = true;//验证结果 foreach (var dict in GetProviderDictionary(container)) { foreach (var provider in dict.Value) { if (!provider.Validate()) { //任何一个未经过验证,则设置验证结果为false isValid = false; //待验证控件中的任何一个验证规则未经过,当即退出,再也不验证该控件的其余规则 break; } } } return isValid; } public static void CustomValidation(this Control container, Control controlToValidate, string errorText, Func validate) { CustomValidation(container, controlToValidate, errorText, validate, false, true); } private static void CustomValidation(this Control container, Control controlToValidate, string errorText, Func validate, bool alignRight, bool manualValidation) { //得到带验证的控件的DXValidationProvider集合。 var dictionary = GetProviderDictionary(container); var providers = GetProvider(controlToValidate, dictionary); var provider = new DXValidationProvider(); provider.ValidationMode = manualValidation ? ValidationMode.Manual : ValidationMode.Auto; provider.SetIconAlignment(controlToValidate, alignRight ? ErrorIconAlignment.MiddleRight : ErrorIconAlignment.MiddleRight); provider.SetValidationRule(controlToValidate, new CustomValidationRule(validate) { ErrorText = errorText, }); // 将DXValidationProvider添加到待验证控件的DXValidationProvider集合中。 providers.Add(provider); } /// ///返回待验证控件的DXValidationProvider集合 /// ///待验证控件 ///待验证控件所在的字典表 /// private static List GetProvider(Control controlToValidate, Dictionary> dictionary) { var key = controlToValidate.GetHashCode(); if (dictionary.ContainsKey(key)) return dictionary[key]; else { var providers = new List(); dictionary.Add(key, providers); return providers; } } /// ///返回空间容器的待验证控件字典 /// /// /// private static Dictionary> GetProviderDictionary(Control container) { var key = container.GetHashCode(); if (providerDictionary.ContainsKey(key)) { return providerDictionary[key]; } else { var providers = new Dictionary>(); providerDictionary.Add(key, providers); return providers; } } } }