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: 可选参数,用于指定要排除的控件名称,多个名称用逗号分隔

方法说明:

  1. 创建一个 Dictionary,键为控件类型,值为验证方法(Func 委托)。
  2. 遍历 Panel 中的子控件,判断当前控件的类型是否存在验证方法。
  3. 如果存在验证方法,则调用该方法进行验证,如果验证不通过,则将失败的控件名称存储到 empty 参数中,并返回 false。
  4. 如果所有控件都验证通过,则返回 true。

示例:

// 验证 Grid 控件中的 TextBox、ComboBox 和 DatePicker 控件内容是否为空
string emptyName;
bool isValid = IsNotEmpty(myGrid, out emptyName, "txtName", "txtPassword");

// 如果 isValid 为 false,则 emptyName 中存储了验证失败的控件名称

注意:

  • 该方法只验证了 TextBox、ComboBox 和 DatePicker 控件,如果需要验证其他类型控件,请自行添加相应的验证方法。
  • SelectName 方法用于根据验证失败的控件名称进行一些其他操作,例如提示信息等。
  • 可以根据实际情况修改验证逻辑,例如可以根据控件的属性进行更复杂的验证。

该方法可以帮助您简化 Panel 控件内容的非空验证,提高代码的可读性和可维护性。

相关链接:

C# Panel 控件内容非空验证方法 - IsNotEmpty()

原文地址: https://www.cveoy.top/t/topic/kfou 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录