|
■No95183 (北松 さん) に返信 > Return i > Me.Controls.Count.ToString() > End Function
Return の後に処理を書いても、その行は実行されませんよ。
> Private Function GetGroupBoxCount(ByVal Ctrl As Control) As Integer > If Ctrl.Controls.Count = 0 Then > If TypeOf Ctrl Is GroupBox Then > Return 1 > Else > Return 0 > End If > End If
これだと、「子コントロールを貼っていない GroupBox」は 1 件としてカウントされますが、 「子コントロールを含んだ GroupBox」は 0 としてカウントされます。
もしも、「子コントロールを貼っているかどうかは関係なく、GroupBox の総数を得ること」を目的としているなら、 そもそも Ctrl.Controls.Count が 0 であるかを調べる必要はないはずです。 例えばこんな感じで書けるでしょう。
' 案1 Private Function GetGroupBoxCount(ByVal Ctrl As Control) As Integer Dim i As Integer = If(TypeOf Ctrl Is GroupBox, 1, 0) For Each c As Control In Ctrl.Controls i += GetGroupBoxCount(c) Next Return i End Function
' 案2 Private Function GetGroupBoxCount(ByVal Ctrl As Control) As Integer GetGroupBoxCount = Ctrl.Controls.OfType(Of GroupBox)().Count() For Each child As Control In Ctrl.Controls GetGroupBoxCount += GetGroupBoxCount(child) Next End Function
あるいは、Ctrl.Controls.Count を見ていたのは意図したものであるのだとしたら、提示されたコードは、 「子を持たない、空の GroupBox を数えること」を目的としたものということになります。 この場合、処理の意図が伝わるよう、Function の名前を GetEmptyGroupBoxCount あたりに変えた方が良いかもしれません。
|