C# Panel 控件内容非空验证方法 - IsNotEmpty()
C# Panel 控件内容非空验证方法 - IsNotEmpty()
该方法用于验证 Panel 控件(包括 Grid 和 StackPanel)中特定类型控件内容是否为空,支持 TextBox、ComboBox 和 DatePicker 等控件。方法通过 Dictionary 存储不同类型控件的验证方法,并遍历 Panel 中的子控件进行验证。
public bool IsNotEmpty(Panel panel, out string empty, params string[] notName)
{
string str = "";
//键值对,键=类型,值是Func委托,参数是FrameworkElement父类,返回是布尔
Dictionary<Type, Func<FrameworkElement, string>> validationMethods = new Dictionary<Type, Func<FrameworkElement, string>>()
{
// 添加验证方法,针对不同类型的控件进行不同的验证
{ typeof(TextBox),(element) => string.IsNullOrEmpty(((TextBox)element).Text)&(((TextBox)element).Name!=notName[0]&((TextBox)element).Name!=notName[1])?((TextBox)element).Name:""},
{ typeof(ComboBox),(element) => string.IsNullOrEmpty(((ComboBox)element).Text)==false?"":((ComboBox)element).Name},
{ typeof(DatePicker), (element) => string.IsNullOrEmpty(((DatePicker)element).Text)==false?"":((DatePicker)element).Name}
};
//遍历Panel中的所有FrameworkElement控件
foreach (var element in panel.Children.OfType<FrameworkElement>())
{
//判断键值对,传入element,判断键值对是否有这个类型 // 判断当前控件的类型是否存在验证方法
if (validationMethods.TryGetValue(element.GetType(), out var validationMethod))
{
str = validationMethod(element);
// 如果存在,则调用对应的验证方法进行验证
if (!string.IsNullOrEmpty(str))
{
empty = SelectName(str);
// 如果验证不通过,则返回false
return false;
}
}
}
empty = SelectName(str);
// 如果验证通过,则返回true
return true;
}
方法参数:
- panel: 要验证的 Panel 控件,可以是 Grid 或 StackPanel
- empty: 输出参数,用于存储验证失败的控件名称
- notName: 可选参数,用于指定要排除的控件名称,多个名称用逗号分隔
方法说明:
- 创建一个 Dictionary,键为控件类型,值为验证方法(Func 委托)。
- 遍历 Panel 中的子控件,判断当前控件的类型是否存在验证方法。
- 如果存在验证方法,则调用该方法进行验证,如果验证不通过,则将失败的控件名称存储到
empty参数中,并返回 false。 - 如果所有控件都验证通过,则返回 true。
示例:
// 验证 Grid 控件中的 TextBox、ComboBox 和 DatePicker 控件内容是否为空
string emptyName;
bool isValid = IsNotEmpty(myGrid, out emptyName, "txtName", "txtPassword");
// 如果 isValid 为 false,则 emptyName 中存储了验证失败的控件名称
注意:
- 该方法只验证了 TextBox、ComboBox 和 DatePicker 控件,如果需要验证其他类型控件,请自行添加相应的验证方法。
SelectName方法用于根据验证失败的控件名称进行一些其他操作,例如提示信息等。- 可以根据实际情况修改验证逻辑,例如可以根据控件的属性进行更复杂的验证。
该方法可以帮助您简化 Panel 控件内容的非空验证,提高代码的可读性和可维护性。
相关链接:
原文地址: https://www.cveoy.top/t/topic/kfou 著作权归作者所有。请勿转载和采集!