7

我有一个具有 a 的表单,tab control每个选项卡都有多个textboxes,labelsbuttons。我想让用户清除所选选项卡的文本框中的所有文本。

我试过了

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

InvalidCastException上面的代码用 Message抛出一个Unable to cast object of type 'System.Windows.Forms.Button' to type 'System.Windows.Forms.TextBox

请问我做错了什么,我该如何纠正?

4

5 回答 5

5

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

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 = "";
    }
}
于 2013-08-03T17:04:35.467 回答
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);
    }
于 2013-08-03T17:27:37.780 回答
1

使用可以简单地遍历选定选项卡中的所有控件,并在清除文本之前检查是否control typeTextBox并清除文本。

 foreach (Control item in tabControl1.SelectedTab.Controls)
            {
                if (item.GetType().Equals(typeof(TextBox)))
                {
                    item.Text = string.Empty;
                }
            }
于 2013-08-03T17:14:41.433 回答
1

如果您的选项卡控件中嵌套了文本框。您需要在这里编写一个递归方法,因为该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;
}
于 2013-08-03T17:16:44.213 回答
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();
                }
            }
于 2013-08-03T18:22:31.540 回答