お気づきかもしれませんが、これを行う必要がある場所がいくつかあるかもしれません。機能の一部を再利用するには、そのジョブを実行する新しいメソッドを作成します。フォームをダブルクリックし、これを End Class の直前に配置します。
''' <summary>Update each of the CheckBoxes that in the same GroupBox</summary>
''' <param name="sender">The CheckBox that was clicked.</param>
''' <param name="e"></param>
''' <remarks>It is assumed that only checkboxed that live in a GroupBox will use this method.</remarks>
Public Sub UpdateCheckBoxState(ByVal sender As System.Object, ByVal e As System.EventArgs)
'Get the group box that the clicked checkbox lives in
Dim parentGroupBox As System.Windows.Forms.GroupBox = DirectCast(DirectCast(sender, System.Windows.Forms.CheckBox).Parent, System.Windows.Forms.GroupBox)
For Each ctrl As System.Windows.Forms.Control In parentGroupBox.Controls
'Only process the checkboxes (in case there's other stuff in the GroupBox as well)
If TypeOf ctrl Is System.Windows.Forms.CheckBox Then
'This control is a checkbox. Let's remember that to make it easier.
Dim chkBox As System.Windows.Forms.CheckBox = DirectCast(ctrl, System.Windows.Forms.CheckBox)
If chkBox.CheckState = 1 Then
chkBox.Text = "Deselect All"
Else
chkBox.Text = "Select All"
End If
End If ' - is CheckBox
Next ctrl
End Sub
これで、目的を実行するメソッドができました。管理する各 CheckBox にそれを接続する必要があります。これを行うには、Form_Load イベントに次のコードを追加します。
AddHandler CheckBox1.CheckedChanged, AddressOf UpdateCheckBoxState
AddHandler CheckBox2.CheckedChanged, AddressOf UpdateCheckBoxState
...
したがって、同じメソッドが、接続されているすべてのチェックボックスの ClickChanged メソッドを処理します。
UpdateCheckBoxState(
Form_Load などでメソッドCheckBoxThatYouWantToProgramaticallyUpdateを呼び出して、ユーザーがクリックしたときに加えて、checkBoxes を更新することもできます, Nothing)
。