105 lines
4.1 KiB
C#
105 lines
4.1 KiB
C#
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;
|
||
}
|
||
}
|
||
}
|
||
} |