我制作的计算器是文本框和单选按钮的组合,当点击“计算”时,我想要一个消息框来检查整个程序,然后(如果需要)显示一个消息框,上面写着“以下内容”区域仍然需要完成'然后列出这些区域。
我知道如何编写一个基本代码,如果我已经制作了一个不知道如何让它一次性检查多个文本框和单选按钮。
该按钮的当前代码为:
private void button4_Click(object sender, EventArgs e)
{
DrawForce = (Area2 * (StrengthCoeff / (WorkHardExp + 1)) * (Math.Pow(Math.Log(Area1 / Area2), WorkHardExp + 1)));
DrawForce = Math.Round(DrawForce, 2);
textBox7.Text = DrawForce.ToString() + " N";
}
我不希望将输入代码复制到此处,所以我希望这样就足够了
由于
答案 0 :(得分:0)
如果我理解正确,您正在寻找一种方法来循环检查表单上的许多控件。有几种方法可以做到这一点。
一种方法是在表单上创建一个类级别集合,该集合包含对控件的引用。例如,像这样:
private IEnumerable<TextBox> textBoxes = new List<TextBox>
{
TextBox1,
TextBox2,
TextBox3
};
然后你可以循环检查它:
var errors = new List<string>();
foreach (var textBox in textBoxes)
if (string.IsNullOrWhitespace(textBox.Text))
errors.Add(string.Format("{0} is empty.", textBox.Name));
// errors now contains the list of validation messages
这样做的缺点是,如果更改表单,则需要手动更新集合。如果不会有太多变化,那应该不是问题。
另一种选择可能是遍历表单的Controls
集合。像这样:
var errors = new List<string>();
foreach (var control in Controls)
if (control is TextBox)
if (string.IsNullOrWhitespace((control as TextBox).Text))
errors.Add(string.Format("{0} is empty.", (control as TextBox).Name));
// errors now contains the list of validation messages
这更具动感,但也更脆弱一点。如果有任何文本框嵌套在其他控件中,那么这将找不到那些,你需要使这更加递归以循环遍历control.Controls
。这可能会有点难看,如果表格不太可能改变,可能不值得。但不管怎样,它可能看起来像这样:
private IList<string> GetErrorsForControls(ControlCollection controls)
{
var errors = new List<string>();
foreach (var control in controls)
{
if (control is TextBox)
if (string.IsNullOrWhitespace((control as TextBox).Text))
errors.Add(string.Format("{0} is empty.", (control as TextBox).Name));
errors = errors.Concat(GetErrorsForControls(control.Controls));
}
return errors;
}
然后在您的代码中,您只需调用该方法:
var errors = GetErrorsForControls(Controls);
要为文本框之外的其他类型的控件添加验证,只需添加其他类级别集合或在循环中添加其他类型的检查。