我在面板上添加了一个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");
}
}
答案 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
行会占用您的一个用户控件并找到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;
}
答案 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");
}
}