检查ControlControl中的Control是否为Textbox

时间:2012-05-23 21:41:22

标签: c# winforms controls tabcontrol

要清除我的文本框,我在表单中使用以下代码:

foreach (Control c in this.Controls)
{
    if (c is TextBox || c is RichTextBox)
    {
        c.Text = "";
    }
}

但现在我的文本框位于TabControl中。如何对文本框运行相同类型的检查,如果控件是文本框,则将值设置为“”。我已经尝试过使用:

foreach(Control c in tabControl1.Controls)

但是这没用。

4 个答案:

答案 0 :(得分:13)

使用此

foreach (TabPage t in tabControl1.TabPages)
{
    foreach (Control c in t.Controls)
    { 
        if (c is TextBox || c is RichTextBox)
        {
            c.Text = "";
        }
    }
}

答案 1 :(得分:5)

您也可以使用Enumerable.OfTypeTextBoxRichTextBox是唯一从TextBoxBase继承的控件,这是您要查找的类型:

var allTextControls = tabControl1.TabPages.Cast<TabPage>() 
   .SelectMany(tp => tp.Controls.OfType<TextBoxBase>());
foreach (var c in allTextControls)
    c.Text = "";

答案 2 :(得分:1)

tabControl1.Controls无效,因为标签控件包含TabPage。您需要定位正确的页面。

或者,您可以构建一个递归方法来执行此操作:

static void RecurseClearAllTextBoxes(Control parent)
{
    foreach (Control control in parent.Controls)
    {
        if (control is TextBox || control is RichTextBox)
            control.Text = String.Empty;
        else
            RecurseClearAllTextBoxes(control);
    }

    if (parent is TabControl)
    {
        foreach (TabPage tabPage in ((TabControl)parent).TabPages)
            RecurseClearAllTextBoxes(tabPage);
    }
}

答案 3 :(得分:1)

Limpiar Controles

        foreach (Control C in GB.Controls)
        { 
            if(C is TextBox)
            {
                (C as TextBox).Clear();
            }
            if(C is DateTimePicker)
            {
                (C as DateTimePicker).Value = DateTime.Now;
            }
            if (C is ComboBox)
            {
                (C as ComboBox).SelectedIndex = 0;
            }
        }