7

tab control各タブには と の数がtextboxesあるフォームがlabelsありますbuttons。選択したタブのテキストボックス内のすべてのテキストをユーザーがクリアできるようにしたいと考えています。

私が試してみました

    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ます。

Plsは何を間違えましたか、どうすれば修正できますか?

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 に答える
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 に答える