验证bool条件时出错

时间:2012-12-17 08:37:58

标签: c#

我在面板上添加了一个usercontrol,并将usercontrol中的组合框的属性设置为public,我想验证它,但是我一直点击它显示表单的按钮。该问题是什么,如何通过按钮动态添加多个组合框来验证。

bool tat;
public bool val2()
{
    foreach (Control item in panel1.Controls.OfType<ComboBox>())
    {
        if (item.Text == string.Empty)
        {
            tat = true;
        }
        else
        {
            tat = false;
        }
    }

    return tat;
}

private void button2_Click(object sender, EventArgs e)
{
    bool valo = val2();

    if (!valo)
    {
        Form4 fp = new Form4();
        fp.Show();
    }
    else
    {
        MessageBox.Show("error");
    }
}

2 个答案:

答案 0 :(得分:4)

你所做的是每次循环时覆盖 tat的值,例如:

ComboBox1    "Hello"   tat = false
ComboBox2    Empty     tat = true
ComboBox3    "World"   tat = false again!
             Return:   false

如果任何组合框为空,我假设您要返回true;您可以按如下方式修改您的功能:

public bool val2()
{
    foreach (Control item in panel1.Controls.OfType<ComboBox>())
    {
        if (item.Text == string.Empty)
        {
            // We know one is empty so we must return true.
            return true;
        }
    }
    // We know none are empty so we can return false.
    return false;
}

或者因为您已经在使用LINQ,所以可以使用

public bool val2()
{
    return panel1.Controls.OfType<ComboBox>().Any(cb => cb.Text == String.Empty);
}

会做同样的事情。


修改: 看起来ComboBox控件不是直接 panel1的孩子,但是在某种自定义用户中控制。因此,你需要像

这样的东西
return panel1.Controls
    .OfType<YourCustomUserControlType>()
    .Select(uc => uc.NameOfYourComboBox)
    .Any(cb => cb.Text == String.Empty);

因此OfType行现在正在挑选您的自定义用户控件,Select行会占用您的一个用户控件并找到ComboBoxAny行检查它们是否都有值。

原始风格的替代品:

public bool val2()
{
    foreach (YourCustomUserControlType item in 
        panel1.Controls.OfType<YourCustomUserControlType>())
    {
        ComboBox cb = item.NameOfYourComboBox;
        if (cb.Text == string.Empty)
        {
            // We know one is empty so we must return true.
            return true;
        }
    }
    // We know none are empty so we can return false.
    return false;
}

答案 1 :(得分:2)

问题是您要为每个组合框决定val2的值。可能最后一个组合框有一个值,因此显示的是表单而不是消息框。如果只有当所有组合框都选择了值时才希望结果为true,你需要寻求以下解决方案:

假设所有组合框都有选定的值。只要一个没有值,就返回true;

public bool val2()
{
    foreach (Control item in panel1.Controls.OfType<ComboBox>())
    {
        if (String.IsNullOrEmpty(item.Text))
            return true;
    }
    return false;
}


private void button2_Click(object sender, EventArgs e)
{

    bool valo = val2();

    if (!valo)
    {
        Form4 fp = new Form4();
        fp.Show();
    }
    else
    {
        MessageBox.Show("error");

    }
}