2012-01-06 15 views
1

私のプログラムでは、両方のパネルに1,2のテキストボックスがあるスプリットコンテナが使用されています。私は、プログラムがユーザーに保存を促すプロンプトを閉じるのを試みているときに、チェックを実行しようとしています。私は次のコードを試しましたが、テキストボックスがsplitcontaier(ちょうど推測)内にあるので動作しないようです。splitcontainer内のすべてのテキストボックスをチェックする方法は?

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

     } 
    } 

フォーム内にテキストボックスがあるプログラムでこのコードのビットを使用すると、機能します。テキストボックスがパネル内にある場所で使用しようとすると、それは表示されません。私はそれがsplitcontainer内のテキストボックスに対処するために取得できますかsplitcontainer

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

を指定するコードを使用する場合にも動作しませんか?

私は、特定のパネル内のテキストボックスを指定し、それらを一度に各1行うことができます。

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

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

+0

あなたはsplitcontainer1.Controls "よりのようなもの "の答えを持っている – Maheep

+0

のいずれか何もしないsplitcontainer1を使用して"?"。私は問題が何であるか分かりません。 –

+0

ヒント: 'Controls'はすべてのコントロールを再帰的に返しません。 – leppie

答えて

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"); 
関連する問題