Vb.net 选中其他复选框时取消选中以前选中的复选框
我的表单有3个复选框可供用户使用。当用户错误地选中一个复选框并意识到错误,然后选中正确的复选框时,我需要不正确的复选框自动取消选中 我已经努力地在网上搜索,但是找不到任何提供VB 2010答案的网站。它们主要提供HTML、Excel、Java等解决方案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那么
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也是如此。非常感谢。我还添加了三个单选按钮来测试它们,正如您所说的,它们会自动执行,而无需添加任何代码。但是,由于复选框工作正常,我删除了单选按钮。再次感谢您的时间和知识。这里有什么地方我可以给你评分吗?如果我的答案有帮助,只需勾选它,这会增加我在这里的声誉。你正在使用复选框作为
单选按钮
。为什么不把它们改成单选按钮,你想要的行为就会为你完成呢?谢谢你的回复。是,我的用户只能选择一个正确的选项。我的应用程序是一个琐事游戏。