tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板) [ツリー表示へ]   [Home]
一括表示(VB.NET VB2005)
タイトルFormの全てのコントロールのTextをクリアするには
記事No6143
投稿日: 2007/08/24(Fri) 22:57
投稿者びぎ
 こんばんは。

VB2005にてFormの全てのコントロールのTextをクリアするのに

Dim oControl AS Control
Dim oControl2 AS Control

For Each oControl In Me.Controls
  IF oControls.Count > 1 Then
     For Each oControl2 In oControl.ControlS
         oControl2.Text = ""
     Next
  Else
     oControl.Text = ""
  END IF
Next
とコーディングしました。
IF oControls.Count > 1 Then
     For Each oControl2 In oControl.ControlS
         oControl2.Text = ""
     Next
としているのは,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の全てのコントロールのTextをクリアするには
記事No6144
投稿日: 2007/08/25(Sat) 00:34
投稿者花ちゃん
下記のように再帰的に実行すればいいのでは。
(別途エラー処理をするようにして下さいね)

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

[ツリー表示へ]
タイトルRe^2: Formの全てのコントロールのTextをクリアするには
記事No6147
投稿日: 2007/08/25(Sat) 21:28
投稿者びぎ
  ありがとうございます。

再帰的という考えがありました。

[ツリー表示へ]