0

ボタンがクリックされたときに「すべての」テキストボックスを一緒に非表示にする方法は? それらを1つずつ非表示にしないための短い方法はありますか?

gamma_textBox.Visible = false;
4

5 に答える 5

4
foreach(var tb in this.Controls.OfType<TextBox>()) tb.Visible = false;

ただし、これはコンテナ内を調べないことに注意してください。ただし、各子のControlsコレクションを列挙することにより、再帰的に行うことができます。この例は次のようになります。

public void HideChildTextBoxes(Control parent)
{
    foreach(Control c in parent.Controls)
    {
        HideChildTextBoxes(c);
        if(c is TextBox) c.Visible = false;
    }
}
于 2013-01-26T12:06:22.533 に答える
3

この一般的な再帰的な方法を使用できます。

private void ProcessAllControls<T>(Control rootControl, Action<T> action)where T:Control
{
    foreach (T childControl in rootControl.Controls.OfType<T>())
    {
        action(childControl);
    }
    foreach (Control childControl in rootControl.Controls)
    {
        ProcessAllControls<T>(childControl, action);
    }
}

次のように動作します。

ProcessAllControls<TextBox>(this, txt=> txt.Visible = false);

このメソッドは、特定のコンテナー コントロールのすべての子コントロールを再帰的に検索して、指定された型のコントロールを探します。次に、アクションを適用します (この場合は変更されますVisibility)

任意の種類のコントロールが必要な場合は、非ジェネリック オーバーロードを使用します。

public static void ProcessAllControls(Control rootControl, Action<Control> action)
{
    foreach (Control childControl in rootControl.Controls)
    {
        ProcessAllControls(childControl, action);
        action(childControl);
    }
}
于 2013-01-26T12:10:47.803 に答える
2

Winforms を使用している場合は、次のように実行できます。

for (int i = 0; i < this.Controls.Count; i++)
{
   if (this.Controls[i].GetType().ToString() == "System.Windows.Forms.TextBox")
       this.Controls[i].Visible = false;
}
于 2013-01-26T12:09:01.540 に答える
1

それらをパネル (または他のコンテナー) に貼り付け、そのパネルの可視性を設定します。

于 2013-01-26T12:10:22.713 に答える
0

すべてのテキストボックスをLIST(または配列)に入れてから、 for 反復を使用してそれらを非表示にすることができます。

于 2013-01-26T12:10:59.170 に答える