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;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|