Vb.net 选中其他复选框时取消选中以前选中的复选框

Vb.net 选中其他复选框时取消选中以前选中的复选框,vb.net,Vb.net,我的表单有3个复选框可供用户使用。当用户错误地选中一个复选框并意识到错误,然后选中正确的复选框时,我需要不正确的复选框自动取消选中 我已经努力地在网上搜索,但是找不到任何提供VB 2010答案的网站。它们主要提供HTML、Excel、Java等解决方案 Private Sub-form\u Load(发送方作为System.Object,e作为System.EventArgs)处理MyBase.Load StartupForm.Close()文件 如果Me.CheckBox1.Checked那么

我的表单有3个复选框可供用户使用。当用户错误地选中一个复选框并意识到错误,然后选中正确的复选框时,我需要不正确的复选框自动取消选中

我已经努力地在网上搜索,但是找不到任何提供VB 2010答案的网站。它们主要提供HTML、Excel、Java等解决方案

Private Sub-form\u Load(发送方作为System.Object,e作为System.EventArgs)处理MyBase.Load
StartupForm.Close()文件
如果Me.CheckBox1.Checked那么
Me.CheckBox2.Checked=False
Me.CheckBox3.Checked=False
如果是我的话,那么就检查
Me.CheckBox1.Checked=False
Me.CheckBox3.Checked=False
如果是我的话,那么就检查
Me.CheckBox1.Checked=False
Me.CheckBox2.Checked=False
如果结束
端接头

此代码的结果是,它不会取消选中复选框。我没有得到错误代码,只是没有取消选中复选框。我还尝试了其他代码项,如
Me.Checkbox2.CheckState.Checked=CheckState.Unchecked
,但没有成功。相信您可以引导我在选中另一个复选框时,朝正确的方向取消选中复选框。

您似乎用错误的处理程序处理代码。关闭表单时正在更改内容。尝试将代码移动到
复选框x.CheckedChanged
处理程序:

    Private Sub CheckBox1_CheckedChanged(sender As Object, e As EventArgs) Handles CheckBox1.CheckedChanged
        If CheckBox1.Checked Then
           CheckBox2.Checked = False
           CheckBox3.Checked = False        
    End Sub
更新:我意识到我复制和粘贴的原始代码会导致循环,因为复选框状态的更改会触发其他例程。这是不必要的,因为您只需要在用户单击的框已选中时清除其他框。 您还需要将类似的代码添加到
CheckBox2.CheckedChanged
CheckBox3.CheckedChanged


另外,我应该指出,您正试图使
复选框
充当
单选按钮
。为什么不将复选框控件替换为单选按钮,以便VB为您处理唯一的行为

首先,正如daShier所提到的,您将代码放在了错误的事件处理程序中。由于要在选中一个复选框时取消选中其他复选框,因此必须将代码放入参与此选择逻辑的所有复选框的
单击
检查更改
事件处理程序中。我建议加入
CheckChanged
事件,因为它将被触发,即使您的复选框检查状态除了通过鼠标或键盘操作外,还通过代码更改

' declare variable to keep track of the previous selected checkbox
Dim prevSelectedCheckBox As CheckBox

' all checkboxes to be controlled are handled by this event handler
Private Sub CheckBoxes_CheckedChanged(sender As Object, e As EventArgs) Handles CheckBox1.CheckedChanged, CheckBox2.CheckedChanged, CheckBox3.CheckedChanged
    ' first, identify which checkbox is triggering this event
    Dim this As CheckBox = DirectCast(sender, CheckBox)

    ' if this event is triggered when this checkbox is being checked
    If this.Checked Then
        ' if there is a checkbox previously selected/checked
        If prevSelectedCheckBox IsNot Nothing Then
            prevSelectedCheckBox.Checked = False ' uncheck it
        End If

        ' now this checkbox is currently the checked one, save it to the variable
        prevSelectedCheckBox = this

    ' if event is triggered by unchecking this checkbox, and this checkbox is the previously checked checkbox
    ElseIf this.Equals(prevSelectedCheckBox) Then
        ' clear the variable since now, there is no checkbox is being checked
        prevSelectedCheckBox = Nothing

    End If
End Sub

但是,如果用户只能在复选框表示的选项中选择一个选项,则最好使用单选按钮

顺便说一下:您可以通过简单地“单击”表单设计屏幕上的复选框来访问这些处理程序。Visual Studio将创建子例程模板(如果它不存在)并打开它进行编辑。daShier,你是对的-我用错误的处理程序处理代码。正如您所建议的,我将代码放在三个复选框和“Ta Da”的_CheckChanged处理程序中,它工作得非常好。如果我选中复选框1,然后转到复选框2并选中它,则签入复选框1将消失,而支票仍保留在复选框2中。复选框3也是如此。非常感谢。我还添加了三个单选按钮来测试它们,正如您所说的,它们会自动执行,而无需添加任何代码。但是,由于复选框工作正常,我删除了单选按钮。再次感谢您的时间和知识。这里有什么地方我可以给你评分吗?如果我的答案有帮助,只需勾选它,这会增加我在这里的声誉。你正在使用复选框作为
单选按钮
。为什么不把它们改成单选按钮,你想要的行为就会为你完成呢?谢谢你的回复。是,我的用户只能选择一个正确的选项。我的应用程序是一个琐事游戏。