当前位置: 首页 > 知识库问答 >
问题:

C#错误提供程序无法处理groupbox和tabcontrols中的TextBox

孙明德
2023-03-14

我正在尝试使用错误提供程序来验证我的文本框在继续执行之前是否为空。

错误提供程序处理主窗体上的文本框,但拒绝处理groupbox或TabControl中的任何文本框或组合框。它不检查文本框,也不显示错误,或者等待用户为正在检查的控件输入文本/选择项。

当然,如果我松开了groupbox或tabcontrol,我将得到正常工作的错误检查,但我也将松开对应用程序使用groupbox和tab控件的好处。

private void button3_Click(object sender, EventArgs e)
{
       //Validate the text box in the form before proceeding to store in Database
       // var emptyornull = Controls.OfType<TextBox>().Where(box => box.Name.StartsWith("_")).OrderBy(box => box.TabIndex);
       // var emptyornull2 = Controls.OfType<ComboBox>().Where(box => box.Name.StartsWith("_")).OrderBy(box => box.TabIndex);

        var boxes = Controls.OfType<TextBox>();

        foreach (var testControl in boxes)
        {
            if (string.IsNullOrEmpty(testControl.Text))
            {
                this.errorProvider1.SetError((Control)testControl, "error");
                return;
            }

            this.errorProvider1.SetError((Control)testControl, (string)null);
        }
}

共有1个答案

弓俊晖
2023-03-14

这是因为您的代码不检查子控件,只检查顶级控件。您需要递归地遍历窗体的控件:

private IEnumerable<Control> GetAllControls(Control control)
{
    var controls = control.Controls.Cast<Control>();
    return controls.SelectMany(ctrl => GetAllControls(ctrl)).Concat(controls);
}

private void button1_Click(object sender, EventArgs e)
{
    errorProvider1.Clear();
    foreach (Control c in GetAllControls(this))
    {
        if (c is TextBox && string.IsNullOrEmpty(c.Text))
            errorProvider1.SetError(c, "Error");
    }
}

或者,林问道:

errorProvider1.Clear();

GetAllControls(this).Where(c => c is TextBox && string.IsNullOrEmpty(c.Text))
    .ToList()
    .ForEach(c => errorProvider1.SetError(c, "Error"));

祝你好运.

 类似资料: