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

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

ログ内検索
  • キーワードを複数指定する場合は 半角スペース で区切ってください。
  • 検索条件は、(AND)=[A かつ B] (OR)=[A または B] となっています。
  • [返信]をクリックすると返信ページへ移動します。
キーワード/ 検索条件 /
検索範囲/ 強調表示/ ON (自動リンクOFF)
結果表示件数/ 記事No検索/ ON
大文字と小文字を区別する

No.95187 の関連記事表示

<< 0 >>
■95187  Re[3]: GROUPBOXの複製について(VB.NET)
□投稿者/ 魔界の仮面弁士 -(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 あたりに変えた方が良いかもしれません。
記事No.95177 のレス /過去ログ165より / 関連記事表示
削除チェック/



<< 0 >>

パスワード/

- Child Tree -