C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト


■95187 / )  Re[3]: GROUPBOXの複製について(VB.NET)
□投稿者/ 魔界の仮面弁士 (2764回)-(2020/06/29(Mon) 18:53:39)
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 あたりに変えた方が良いかもしれません。
返信 編集キー/


管理者用

- Child Tree -