所以我编写了一个代码来检查我的表单中是否有任何字段为空。我有多个表单,我必须在其中几个中使用此验证检查。我想将其写为全局函数,所以我不喜欢#39; t必须一次又一次地编写相同的代码行。但代码包含对" this"的引用。如何获取将其作为参数调用的表单类,以便我可以使代码全局化这是我的代码:
// Checks if any field is empty.
foreach (Control ctrl in this.Controls)
{
// Checking if it is a textbox.
if (ctrl is TextBox)
{
TextBox txtbx = ctrl as TextBox;
if (txtbx.Text == String.Empty)
{
MessageBox.Show("Please fill all the fields.", "Empty Fields", MessageBoxButtons.OK, MessageBoxIcon.Warning);
txtbx.Focus();
}
}
// Checking if it is a combobox.
else if (ctrl is ComboBox)
{
ComboBox cmbbx = ctrl as ComboBox;
if (cmbbx.Text == String.Empty)
{
MessageBox.Show("Please fill all the fields.", "Empty Fields", MessageBoxButtons.OK, MessageBoxIcon.Warning);
cmbbx.Focus();
}
}
}
对代码进行了哪些更改,以便可以全局使用。例如,可以通过这种方式调用它:
ValidateForm(this);
或者有更好的方法吗?
答案 0 :(得分:2)
您可以将该代码块移动到接受Form
:
public class Helper
{
public static void Validate(Form form)
{
foreach (Control ctrl in form.Controls)
{
...
...
}
}
}
你也可以使用LINQ一次选择所有空控件,然后专注于第一个。
var invalidControls = form.Controls.Cast<Control>()
.Where(c => (c is TextBox || c is ComboBox) && c.Text == string.Empty);
if (invalidControls.Any())
{
MessageBox.Show("Please fill all the fields", "Empty Fields",
MessageBoxButtons.OK, MessageBoxIcon.Warning);
invalidControls.First().Focus();
}
您可能希望一次性查看无效字段,因此用户无法修复一个,只是为了在以下每个字段上获得相同的消息,一次一个。