public bool IsNotEmpty(StackPanel stackPanel, 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}
    };

    // 遍历 StackPanel 中的所有 FrameworkElement 控件
    foreach (var element in stackPanel.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;
}

使用方法:

// 创建一个 StackPanel 对象
StackPanel stackPanel = new StackPanel();

// 添加一些 TextBox、ComboBox 和 DatePicker 控件到 StackPanel 中
...

// 调用 IsNotEmpty 方法进行验证
string empty;
bool isValid = IsNotEmpty(stackPanel, out empty, 'TextBox1', 'TextBox2');

// 检查验证结果
if (isValid)
{
    // 验证通过,可以执行其他操作
}
else
{
    // 验证失败,可以提示用户
    MessageBox.Show('请填写 ' + empty + ' 控件');
}

注意:

  • 该方法仅验证 StackPanel 中的 TextBox、ComboBox 和 DatePicker 控件,如果需要验证其他类型的控件,需要在 validationMethods 字典中添加相应的验证方法。
  • SelectName 方法用于获取控件的名称,需要根据实际情况进行修改。
  • 该方法可以使用 params 参数来指定需要排除验证的控件名称。

示例代码:

// 示例代码,创建一个 StackPanel,并添加一些控件
StackPanel stackPanel = new StackPanel();
stackPanel.Children.Add(new TextBox() { Name = 'TextBox1' });
stackPanel.Children.Add(new ComboBox() { Name = 'ComboBox1' });
stackPanel.Children.Add(new DatePicker() { Name = 'DatePicker1' });

// 调用 IsNotEmpty 方法进行验证
string empty;
bool isValid = IsNotEmpty(stackPanel, out empty, 'TextBox1', 'TextBox2');

// 检查验证结果
if (isValid)
{
    Console.WriteLine('验证通过');
}
else
{
    Console.WriteLine('验证失败,请填写 ' + empty + ' 控件');
}
C# StackPanel 控件验证方法 - IsNotEmpty

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

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