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

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

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

No.95177 の関連記事表示

<< 0 >>
■95177  GROUPBOXの複製について(VB.NET)
□投稿者/ 北松 -(2020/06/29(Mon) 11:58:36)

    分類:[VB.NET/VB2005 以降] 

    VB.NETでプログラミング中です。

    WindowsFormにて、
    Form1内にGroupBox1を作成し、
    GroupBox1内に複数のLabelやTextBoxを配置しています。
    TextBoxには住所や氏名を入力し、
    Botton1クリックイベントでデータベースにレコードを登録します。

    【ここからやりたいこと】
    Botton2クリックイベントにてGroupBox1を複製し、真下にGroupBox2を作成し
    たい。
    作成されたGroupBox2内のTextBoxはすべてブランク。
    Botton2クリックイベントのたび、GroupBox3、GroupBox4と追加する。
    GroupBox1とGroupBox2にそれぞれ情報を入力し、別レコードとしてデータベー
    スに登録する。
    【ここまでやりたいこと】

    上記処理は可能でしょうか?
    可能な場合、サンプル等ご教授いただければ幸いです。

    不可の場合、代替手段があれば教えてください。

    よろしくお願いします。
親記事 /過去ログ165より / 関連記事表示
削除チェック/

■95178  Re[1]: GROUPBOXの複製について(VB.NET)
□投稿者/ kiku -(2020/06/29(Mon) 12:05:41)
    No95177 (北松 さん) に返信
    > 【ここからやりたいこと】
    > Botton2クリックイベントにてGroupBox1を複製し、真下にGroupBox2を作成し
    > たい。
    > 作成されたGroupBox2内のTextBoxはすべてブランク。
    > Botton2クリックイベントのたび、GroupBox3、GroupBox4と追加する。
    > GroupBox1とGroupBox2にそれぞれ情報を入力し、別レコードとしてデータベー
    > スに登録する。
    > 【ここまでやりたいこと】

    下記が参考になると思います。
    https://dobon.net/vb/dotnet/control/addcontrol.html
記事No.95177 のレス /過去ログ165より / 関連記事表示
削除チェック/

■95183  Re[2]: GROUPBOXの複製について(VB.NET)
□投稿者/ 北松 -(2020/06/29(Mon) 15:08:18)
    No95178 (kiku さん) に返信
    > 下記が参考になると思います。
    > https://dobon.net/vb/dotnet/control/addcontrol.html

    ありがとうございます。
    GroupBoxを追加する際、Nameプロパティの設定やLacationプロパティの指定について
    フォーム内のGroupBoxの個数を変数として扱いたいのですが、うまくいきません。

    Dim i As Integer = GetGroupBoxCount(Me)
    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

    Dim i As Integer
    For Each c As Control In Ctrl.Controls
    i += GetGroupBoxCount(c)
    Next
    Return i
    Me.Controls.Count.ToString()
    End Function

    でiが0以外になりません。
    間違いをご指摘いただければ幸いです。
記事No.95177 のレス /過去ログ165より / 関連記事表示
削除チェック/

■95184  Re[3]: GROUPBOXの複製について(VB.NET)
□投稿者/ kiku -(2020/06/29(Mon) 15:36:35)
    No95183 (北松 さん) に返信
    > ■No95178 (kiku さん) に返信
    >>下記が参考になると思います。
    >>https://dobon.net/vb/dotnet/control/addcontrol.html
    >
    > ありがとうございます。
    > GroupBoxを追加する際、Nameプロパティの設定やLacationプロパティの指定について
    > フォーム内のGroupBoxの個数を変数として扱いたいのですが、うまくいきません。
    >
    > Dim i As Integer = GetGroupBoxCount(Me)
    > 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
    >
    > Dim i As Integer
    > For Each c As Control In Ctrl.Controls
    > i += GetGroupBoxCount(c)
    > Next
    > Return i
    > Me.Controls.Count.ToString()
    > End Function
    >
    > でiが0以外になりません。
    > 間違いをご指摘いただければ幸いです。

    C#ならよかったのですが、VB.NETは良くわからないので
    概要だけ回答します。

    1.Controlsからforeachで取り出し
    2.TypeOfでGroupBoxであったら、カウントを1つ増やす
記事No.95177 のレス /過去ログ165より / 関連記事表示
削除チェック/

■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より / 関連記事表示
削除チェック/

■95213  Re[4]: GROUPBOXの複製について(VB.NET)
□投稿者/ 北松 -(2020/07/02(Thu) 09:51:48)
    No95187 (魔界の仮面弁士 さん) に返信

    >  ' 案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
    >

    上記でGroupBoxの個数を取得できました。
    ありがとうございます。
記事No.95177 のレス / END /過去ログ165より / 関連記事表示
削除チェック/



<< 0 >>

パスワード/

- Child Tree -