none
Groupbox内のコントロールコレクションが完全取得できない RRS feed

  • 質問

  •  

    お世話になります。

     

    btnCheckboxMakをクリックしてGroupbox1にコントロール配列のチェックボックスChk1()を作り、btnChkClearをクリックしてGroupbox1内のコントロール配列を一度に削除したいのですが、btnChkClearを何度かクリックしないと削除できません。

    Groupbox1内のコントロール配列を1クリックで削除する方法をお願いします。

    コードは次の通りです。

     

    Freind Class Form1

        Private chk1(15) As CheckBox

    ' Form1にGroupbox1を貼り付けて実行してください。

        Private Sub btnCheckboxMake_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
          Dim i As Short

          Dim wh, Hg As Single  

           GroupBox1.size =new size( 480, 50)
            wh = (GroupBox1.Width - 20) / 13  

           Hg = GroupBox1.Height * 2 / 3

            For i = 0 To 15           

         chk1(i) = New CheckBox
                If i = 15 Then
                    chk1(i).Text = "全選"
                    chk1(i).Size = New Size(wh + 15, Hg)
                    chk1(i).Font = New Font("MS 明朝", 8, FontStyle.Regular)
                Else
                    chk1(i).Text = Chr(Asc("A") + i)
                    chk1(i).Size = New Size(wh - 5, Hg)
                    chk1(i).Font = New Font("MS 明朝", 9, FontStyle.Bold)
                End If
                chk1(i).Location = New Point(8 + wh * i, 12)
                chk1(i).CheckAlign = ContentAlignment.BottomCenter
                chk1(i).TextAlign = ContentAlignment.TopCenter
                chk1(i).AutoSize = False
                chk1(i).BackColor = Color.Aqua
                GroupBox1.Controls.Add(chk1(i))
            Next
        End Sub

     

        Private Sub btnChkClear_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            Dim cnt As Control
            Dim i As Integer
            For Each cnt In GroupBox1.Controls
                cnt.Dispose()
            Next
        End Sub


    End Class

    2008年8月30日 16:42

回答

  • trapemiya様、ご回答ありがとうございます。

    GroupBox1.Controls.Clear()と言う方法があったんですね。

    こちらのほうが簡単でした。

     

    はなはなはな様、trapemiya様さまご教授ありがとうございました。

     

     

    2008年8月31日 10:45

すべての返信

  • For Eachの中で削除していくとそうなります。

    一つ削除した時点でコレクションの中身が変わるからでしょう。

     

    For Next で最後から削除していくといいと思います。

     

    あと、Disposeの前に、GroupBox1.Controls.Removeを。

     

    2008年8月30日 17:30
  •  

    はなはなはな様有難うございます。

     

    了解しました。

     

    解決です。

    2008年8月31日 2:16
  • 解決されているようですが、GroupBox1.Controls.Clear()でも良さそうな気がします。

    2008年8月31日 4:04
    モデレータ
  • trapemiya様、ご回答ありがとうございます。

    GroupBox1.Controls.Clear()と言う方法があったんですね。

    こちらのほうが簡単でした。

     

    はなはなはな様、trapemiya様さまご教授ありがとうございました。

     

     

    2008年8月31日 10:45