0

我在面板上添加了一个用户控件并将用户控件中的组合框的属性设置为公共,我想验证这一点,但我一直单击它显示表单的按钮。什么问题,当我通过按钮动态添加多个组合框时如何验证。

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");
    }
}
4

2 回答 2

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行获取您的用户控件之一并找到ComboBox,并且该Any行检查它们是否都有值。

原始风格的替代品:

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;
}
于 2012-12-17T08:42:49.603 回答
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");

    }
}
于 2012-12-17T08:47:10.020 回答