C# 如何使用textbox控件列表测试textbox是否为空?
我在winforms c#应用程序中创建了一个选项卡控件上所有文本框的列表。现在我想做的是检查列表中的每个文本框,并测试该文本框是否为空。如果是,我想使用错误提供程序让用户知道它需要填写。这是我现在使用的代码C# 如何使用textbox控件列表测试textbox是否为空?,c#,winforms,C#,Winforms,我在winforms c#应用程序中创建了一个选项卡控件上所有文本框的列表。现在我想做的是检查列表中的每个文本框,并测试该文本框是否为空。如果是,我想使用错误提供程序让用户知道它需要填写。这是我现在使用的代码 //gathers the controls and adds them to a list on the main form public static List<Control> GetControls(Control form, string type) {
//gathers the controls and adds them to a list on the main form
public static List<Control> GetControls(Control form, string type)
{
var controlList = new List<Control>();
foreach (Control childControl in form.Controls)
{
if (childControl.Name.Contains(type))
{
controlList.Add(childControl);
}
if (childControl.HasChildren) GetControls(form, type);
}
return controlList;
}
//Created in a class called DataVerification
public bool IsNotEmpty(string value, out string errorMessage)
{
errorMessage = "";
if (value.Length == 0)
{
errorMessage = "This Field Is Required";
return false;
}
return false;
}
//method that uses the DataVerification class and the error provider
public void IsNotEmpty()
{
availableControls = GetControls(this.tabPage1, "Text");
string errorMessage;
DataVerification verify = new DataVerification();
foreach (Control c in availableControls)
{
if (!verify.IsNotEmpty(c.Text, out errorMessage))
{
ErrorProvider.SetError(c, errorMessage);
}
}
}
//收集控件并将其添加到主窗体上的列表中
公共静态列表GetControls(控件窗体,字符串类型)
{
var controlList=新列表();
foreach(form.Controls中的Control-childControl)
{
if(childControl.Name.Contains(type))
{
controlList.Add(childControl);
}
if(childControl.haschilds)GetControls(表单,类型);
}
返回控制器;
}
//在名为DataVerification的类中创建
public bool IsNotEmpty(字符串值,out string errorMessage)
{
errorMessage=“”;
如果(value.Length==0)
{
errorMessage=“此字段为必填项”;
返回false;
}
返回false;
}
//方法,该方法使用DataVerification类和错误提供程序
public void是notempty()
{
AvailableControl=GetControls(this.tabPage1,“文本”);
字符串错误消息;
DataVerification Verification=新的DataVerification();
foreach(可用控件中的控件c)
{
如果(!verify.IsNotEmpty(c.Text,out errorMessage))
{
ErrorProvider.SetError(c,errorMessage);
}
}
}
即使我可以显示一个messagebox,让用户知道哪些文本框是空的,也可以。任何帮助都将不胜感激。提前感谢。您可以通过以下方式将控件强制转换为文本框:
TextBox t = (TextBox)c;
然后使用t.Text执行验证。方法
为notempty
为布尔方法;总是返回false
public bool IsNotEmpty(string value, out string errorMessage)
{
errorMessage = "";
if (value.Length == 0)
{
errorMessage = "This Field Is Required";
return true; //instead of false
}
return false;
}
我不太明白你的问题是什么 如果文本框的值为空,则可以使用 String.IsNullOrEmpty() 而不是:
if (!verify.IsNotEmpty(c.Text, out errorMessage))
{
ErrorProvider.SetError(c, errorMessage);
}
只要这样做:
if (String.IsNullOrEmpty(c.Text))
{
ErrorProvider.SetError(c, "This field is required!");
}
另外,我建议您稍微更改一下命名方案。最好的做法是采用“真实”的方法。因此,与IsNotEmpty相比,IsEmpty更易于阅读/维护。那行代码!verify.IsNotEmpty()抛出双负
编辑:
正如ahmad所说:您的方法总是返回false。应改为:
public bool IsNotEmpty(string value, out string errorMessage)
{
if (value.Length == 0)
{
errorMessage = "This Field Is Required";
return false;
}
return true;
}
我不确定我是否理解这个问题,但如果您想知道
文本框
控件的位置并仅验证这些控件,可以执行以下操作:
foreach (Control c in availableControls)
{
TextBox t = c as TextBox;
if (t != null && !verify.IsNotEmpty(t.Text, out errorMessage))
ErrorProvider.SetError(t, errorMessage);
}