1

私のプログラムは、パネル1と2の両方にテキストボックスがある分割コンテナを使用しています。プログラムが閉じようとしているときに、ユーザーに保存を求めるチェックを実行しようとしています。次のコードを試しましたが、テキストボックスがsplitcontaier内にあるため(推測)、機能しないようです。

private void button1_Click(object sender, EventArgs e)
    {
        foreach ( TextBox tb in this.Controls.OfType<TextBox>()) 
        {
            tb.Text = "Save";

        }
    }

フォーム自体にテキストボックスがあるプログラムでコードを使用すると、機能します。テキストボックスがパネル内にある場所で使用しようとすると、使用されません。また、splitcontainerを指定するコードを使用しても機能しません

  foreach ( TextBox tb in splitContainer1.Controls.OfType<TextBox>()) 
       {               
           tb.Text = "Save";
        }

splitcontainer内のテキストボックスをアドレス指定するにはどうすればよいですか?

特定のパネル内のテキストボックスを指定して、一度に1つずつ実行できます。

//this works, but only populates those text boxes in panel1
foreach ( TextBox tb in splitContainer1.Panel1.Controls.OfType<TextBox>() ) 
       {               
           tb.Text = "save";
        }

しかし、私はまだ1つのテストでこれを行うことができないようです。両方のパネルを個別にチェックする必要があります。

4

1 に答える 1

2

Leepieがコメントしたようなものが必要で、特定のタイプのすべてのコントロールを再帰的にチェックします。

このようなメソッドを使用すると、すべてのTextBoxでアクションメソッドを実行できます。

public void ModifyControl<T>(Control root, Action<T> action) where T : Control
{
    if (root is T)
        action((T)root);
    // Call ModifyControl on all child controls
    foreach (Control control in root.Controls)
        ModifyControl<T>(control, action);
}

あなたはそれを次のように呼びます:

ModifyControl<TextBox>(splitContainer1, tb => tb.Text = "Save");
于 2012-01-06T07:05:34.683 に答える