0

我正在尝试自学 VB .net,作为我的第一个项目,我正在尝试设计一种功能与 Gmail 中的复选框非常相似的表单。一组中的大量复选框和一个位于组外的复选框以选择/取消选择其中的复选框。

我已经足够让那个主复选框做它的事情了,但是我真的很想在用户检查组框中的任何内容时通知表单,然后自动更改其文本和功能。我想出的用于更改文本的代码有效,但我不知道该放在哪里:

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 方法。

除了用户单击它时,您还可以通过调用可能在 Form_Load 或其他地方的方法UpdateCheckBoxState(CheckBoxThatYouWantToProgramaticallyUpdate来更新复选框。, Nothing)

于 2012-10-07T22:37:27.360 回答