StableVersion4.3/HL_FristAidPlatform_Public/DXValidationExtension.cs

105 lines
4.1 KiB
C#
Raw Permalink Normal View History

2024-03-11 09:47:34 +08:00
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;
}
}
}
}