C# 如何使用textbox控件列表测试textbox是否为空?

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) {

我在winforms c#应用程序中创建了一个选项卡控件上所有文本框的列表。现在我想做的是检查列表中的每个文本框,并测试该文本框是否为空。如果是,我想使用错误提供程序让用户知道它需要填写。这是我现在使用的代码

//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);
}