StableVersion4.3/HL_FristAidPlatform_Public/DXValidationExtension.cs

105 lines
4.1 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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<int, Dictionary<int, List<DXValidationProvider>>> providerDictionary;
static DXValidationExtension()
{
providerDictionary = new Dictionary<int, Dictionary<int, List<DXValidationProvider>>>();
}
///<summary>
///对控件容器中的待验证控件进行验证,并返回验证结果。
///</summary>
///<param name="container">控件容器</param>
///<returns></returns>
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<object, bool> validate)
{
CustomValidation(container, controlToValidate, errorText, validate, false, true);
}
private static void CustomValidation(this Control container, Control controlToValidate, string errorText, Func<object, bool> 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);
}
///<summary>
///返回待验证控件的DXValidationProvider集合
///</summary>
///<param name="controlToValidate">待验证控件</param>
///<param name="dictionary">待验证控件所在的字典表</param>
///<returns></returns>
private static List<DXValidationProvider> GetProvider(Control controlToValidate, Dictionary<int, List<DXValidationProvider>> dictionary)
{
var key = controlToValidate.GetHashCode();
if (dictionary.ContainsKey(key))
return dictionary[key];
else
{
var providers = new List<DXValidationProvider>();
dictionary.Add(key, providers);
return providers;
}
}
///<summary>
///返回空间容器的待验证控件字典
///</summary>
///<param name="container"></param>
///<returns></returns>
private static Dictionary<int, List<DXValidationProvider>> GetProviderDictionary(Control container)
{
var key = container.GetHashCode();
if (providerDictionary.ContainsKey(key))
{
return providerDictionary[key];
}
else
{
var providers = new Dictionary<int, List<DXValidationProvider>>();
providerDictionary.Add(key, providers);
return providers;
}
}
}
}