- 日時: 2009/12/26 22:29
- 名前: 花ちゃん
 
   - ***********************************************************************************
 * カテゴリー:[コントロール共通][自アプリ関係][]                                  * * キーワード:名前空間:System.Windows.Forms,HasChildren プロパティ,               * ***********************************************************************************
  元質問:Formの全てのコントロールのTextをクリアするには - びぎ 2007/08/24 No.6143 PanelにTextBoxを配置すると外側のFor Each oControl In Me.Controls ではクリアできないからです。 そこで、聞きたいのはPanelの中にPanelを配置しそのPanelにTextBoxを配置するいったことをするともう1つ下位をFor Each する必要があります。 もう1つPanelを配置すると、またその下位をFor Each してクリアします。 省略して書くと For Each oControl In Me.Controls      For Each oControl2 In oControl.ControlS        For Each oControl3 In oControl2.ControlS            For Each oControl4 In oControl3.ControlS といった感じでしょうか。 実際、細かい画面になるとPanelが何階層になっているか見ていくのも大変です。
  ----------------------------------------------------------------------------------- Re: Formの全てのコントロールの.. - 花ちゃん 2007/08/25-00:34 No.6144 ----------------------------------------------------------------------------------- 下記のように再帰的に実行すればいいのでは。 (別途エラー処理をするようにして下さいね。) 又下記サンプルは、他に使っていた物を流用して投稿しておりますので、メソッド名等は 目的に合わせて変更して下さい。
  Private Sub Button1_Click(ByVal sender As System.Object, _                         ByVal e As System.EventArgs) Handles Button1.Click    GetAllControls(Me) End Sub
  Private Sub GetAllControls(ByVal control As Control)    If control.HasChildren Then       For Each childControl As Control In control.Controls          GetAllControls(childControl)         'テキストボックスだけにアクセスしたい場合         ' If TypeOf childControl Is TextBox Then             childControl.Text = "花ちゃん"         ' End If       Next childControl    End If End Sub
  ------------------------------------------------------------------------------------- 全てのコントロールのフォント関係を一斉に変更する場合やバックカラーの設定等用途は色々 あるかと思います。 -------------------------------------------------------------------------------------- 上記の実行結果の画面(画像をクリックすると元のサイズで見られます。)
   デザイン時                   実行時 
 
  |