选定选项卡中所有文本框的清除文本

时间:2013-08-03 17:00:12

标签: c# winforms textbox

我的表单中包含tab control,每个标签都有textboxeslabelsbuttons。我想让用户清除所选标签文本框中的所有文本。

我试过了

    private void resetCurrentPageToolStripMenuItem_Click(object sender, EventArgs e)
    {
        foreach (TextBox t in tabControl1.SelectedTab.Controls)
        {
            t.Text = "";
        }
    }

上面的代码会使用消息InvalidCastException抛出Unable to cast object of type 'System.Windows.Forms.Button' to type 'System.Windows.Forms.TextBox

请问我做错了什么,我该怎么纠正呢?

5 个答案:

答案 0 :(得分:5)

在foreach循环中使用OfType<T>()

private void resetCurrentPageToolStripMenuItem_Click(object sender, EventArgs e)
{
    foreach (TextBox t in tabControl1.SelectedTab.Controls.OfType<TextBox>())
    {
        t.Text = "";
    }
}

替代:

foreach (Control control in tabControl1.SelectedTab.Controls) 
{
    TextBox text = control as TextBox;
    if (text != null) 
    {
        text.Text = "";
    }
}

答案 1 :(得分:4)

在网上发现它并且有效

    void ClearTextBoxes(Control parent)
    {
        foreach (Control child in parent.Controls)
        {
            TextBox textBox = child as TextBox;
            if (textBox == null)
                ClearTextBoxes(child);
            else
                textBox.Text = string.Empty;
        }
    }

    private void resetCurrentPageToolStripMenuItem_Click(object sender, EventArgs e)
    {
        ClearTextBoxes(tabControl1.SelectedTab);
    }

答案 2 :(得分:1)

使用可以简单地遍历所选标签中的所有控件,然后在清除文本之前检查control type是否为TextBox并清除文本。

 foreach (Control item in tabControl1.SelectedTab.Controls)
            {
                if (item.GetType().Equals(typeof(TextBox)))
                {
                    item.Text = string.Empty;
                }
            }

答案 3 :(得分:1)

如果你的tabcontrol中嵌套了文本框。你需要在这里写一个递归方法,因为ofType方法不会返回你的嵌套文本框..

 private void ResetTextBoxes(Control cntrl)
 {
     foreach(Control c in cntrl.Controls)
     {
          ResetTextBoxes(c);
          if(c is TextBox)
            (c as TextBox).Text = string.Empty;
     }
 }

或者,如果您只在TabControl的基础级别上获得了文本框,则可以使用此

foreach(var tb in tabControl1.OfType<TextBox>())
 {
    tb.Text = string.Emtpy;
}

答案 4 :(得分:0)

 var textBoxNames = this.tabControl1.SelectedTab.Controls.OfType<TextBox>();
            foreach (var item in textBoxNames)
            {
                var textBoxes = tabControl1.SelectedTab.Controls.Find(item.Name, true);
                foreach (TextBox textBox in textBoxes)
                {
                    textBox.Clear();
                }
            }