0

私は VB .net を独学しようとしています。私の最初のプロジェクトとして、Gmail のチェックボックスのように機能するフォームを設計しようとしています。グループ内の多数のチェックボックスと、グループ内のチェックボックスを選択/選択解除するためのグループ外にある 1 つのチェックボックス。

そのマスターチェックボックスが機能するのに十分な距離に達しましたが、グループボックス内の何かがユーザーによってチェックされるたびにフォームに通知し、そのテキストと機能を自動的に変更したいと思います. テキストを変更するために思いついたコードは機能しますが、どこに置くべきかわかりません:

For Each ctrl As CheckBox In GroupBox1.Controls
        If ctrl.CheckState = 1 Then
            CheckBox1.Text = "Deselect All"
        End If
    Next

コードをボタンのプッシュまたはチェックボックスの変更にリンクすることはできますが、ユーザーが何かをクリックしてチェックを実行すると目的が無効になるため、自動化したいと考えています。グループボックスをダブルクリックしてそこにコードを配置しようとしましたが、何もしません。また、フォームの背景をダブルクリックしようとしましたが、そこでも何もしません。助けてください。

4

1 に答える 1

1

お気づきかもしれませんが、これを行う必要がある場所がいくつかあるかもしれません。機能の一部を再利用するには、そのジョブを実行する新しいメソッドを作成します。フォームをダブルクリックし、これを 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)

于 2012-10-07T22:37:27.360 に答える