C# 验证布尔条件时出错

C# 验证布尔条件时出错,c#,C#,我在面板上添加了一个usercontrol,并将usercontrol中的combobox属性设置为public,我想验证这一点,但每次单击按钮时,它都会显示表单。问题是,当我通过一个按钮动态添加多个组合框时,如何进行验证 bool tat; public bool val2() { foreach (Control item in panel1.Controls.OfType<ComboBox>()) { if (item.Text == strin

我在面板上添加了一个usercontrol,并将usercontrol中的combobox属性设置为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");
    }
}
bool-tat;
公共布尔值2()
{
foreach(panel1.Controls.OfType()中的控件项)
{
if(item.Text==string.Empty)
{
tat=真;
}
其他的
{
tat=假;
}
}
返回tat;
}
私有无效按钮2\u单击(对象发送者,事件参数e)
{
bool-valo=val2();
如果(!valo)
{
Form4 fp=新的Form4();
fp.Show();
}
其他的
{
MessageBox.Show(“错误”);
}
}
每次通过循环时,您所做的是覆盖
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;
}
因此,type行的
现在正在挑选您的自定义用户控件,
Select
行获取您的一个用户控件并找到
组合框
,而
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;
}
public bool val2()
{
foreach(中的YourCustomUserControlType项
panel1.Controls.OfType())
{
ComboBox cb=您的ComboBox的item.name;
if(cb.Text==string.Empty)
{
//我们知道其中一个是空的,所以我们必须返回true。
返回true;
}
}
//我们知道没有一个是空的,所以我们可以返回false。
返回false;
}
每次通过循环时,您所做的是覆盖
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;
}
因此,type
行的
现在正在挑选您的自定义用户控件,
Select
行获取您的一个用户控件并找到
组合框
,而
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;
}
public bool val2()
{
foreach(中的YourCustomUserControlType项
panel1.Controls.OfType())
{
ComboBox cb=您的ComboBox的item.name;
if(cb.Text==string.Empty)
{
//我们知道其中一个是空的,所以我们必须返回true。
返回true;
}
}
//我们知道没有一个是空的,所以我们可以返回false。
返回false;
}

问题在于您正在为每个组合框决定
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");

    }
}
public bool val2()
{
foreach(panel1.Controls.OfType()中的控件项)
{
if(String.IsNullOrEmpty(item.Text))
返回true;
}
返回false;
}
私有无效按钮2\u单击(对象发送者,事件参数e)
{
bool-valo=val2();
如果(!valo)
{
Form4 fp=新的Form4();
fp.Show();
}
其他的
{
MessageBox.Show(“错误”);
}
}

问题在于您正在为每个组合框决定
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");

    }
}
public bool val2()
{
foreach(panel1.Controls.OfType()中的控件项)
{
if(String.IsNullOrEmpty(item.Text))
返回true;
}
返回false;
}
私有无效按钮2\u单击(对象发送者,事件参数e)
{
bool-valo=val2();
如果(!valo)
{
Form4 fp=新的Form4();
fp.Show();
}
其他的
{
MessageBox.Show(“错误”);
}
}

动态添加
组合框时,
text
属性是否已填充?当然,如果将combobox添加到usercontrol并设置为public,则它将具有text属性。这样,您将永远不会将
text
值设置为空,因为它将始终返回
false
。当您动态添加
combobox
时,
text
属性是否已填充?当然,如果将combobox添加到usercontrol并设置为public,则它将具有text属性。然后,您将永远无法将
text
值设为空,因为它将始终返回
false
。单击按钮时,您的解决方案也将打开表单,表示工作不正常,int c=0;私有空隙ButnOn1Couter(对象发送器,EngEngsE){int V;VC++=C++;PANEL1.VistaCaldLo.ValueVistaLoCur.Mulax;USER CONDULUS =新USENCONDENTRONE();U.Name=“US”+V;US。位置=新点(150, 5 +(30×V));panel1.Controls.Add(us);}我用这段代码添加了用户控件,这可以用你的代码验证吗?啊,等等<代码>面板1。控件
将返回面板的直接子项,但您的下拉列表似乎更深入。我将编辑我的答案。
类型的
是一种LINQ方法。如果有帮助的话,我也可以更新我的非LINQ代码;只需在可访问的地方定义
regex
(例如在
val2()
的开头,并将
cb.Text==String.Empty
替换为
!regex.IsMatch(cb.Text)
。regex只允许一个字符