vb6.0中,多个check,相互制约,就像Option那样,如何实现?

vb6.0中,多个check,相互制约,就像Option那样,如何实现?Private Sub Check1_Click()check2.value = 0End SubPrivate Sub Check2_Click()check1.value = 0End Sub这样的结果是如果1被选中了,再点2,2不是马上被选中,而是先把1清空了,出现2个都没选中的状态,再点一下2,2才被选中。不要说用Option就得了,鄙视答非所问的。Timer1_Timer里的.Value = 0多余了。达到我要的效果了。但我想知道我的代码为什么第一次点check1的时候只把check2清空了,而没把check1选中。附加50分。
2026年09月24日 13:00
有2个网友回答
网友(1):

程序如下 ,楼主给分
添加一个timer控件,定义一个全局变量i

Dim i As Integer

Private Sub Form_Load()
Timer1.Interval = 1
Timer1.Enabled=False
End Sub

Private Sub Timer1_Timer()

If i = 1 Then
Check1.Value = 1
Check2.Value = 0
ElseIf i = 2 Then
Check1.Value = 0
Check2.Value = 1
End If

End Sub

Private Sub Check1_Click()
Check2.Value = 0
i = 1
Timer1.Enabled = True
End Sub
Private Sub Check2_Click()
Check1.Value = 0
i = 2
Timer1.Enabled = True
End Sub

网友(2):

一、当俩Check均未选中(初始状态):
点击其中一个,假定选中Check1,触发Check1_Click(check2.value = 0),Check2.Value值未变化,运行结束:Check1.Value=1、Check2.Value=0。
二、当其中一个Check选中时,假定Check1已选中,此时Check1.Value=1,分两种情况:
1、若点击Check1,Check1.Value由1变0,触发Check1_Click(check2.value = 0),Check2.Value值未变化,运行结束:Check1.Value=0、Check2.Value=0。
2、若点击Check2:
Check2.Value由0变1,触发Check2_Click(check1.value = 0)Check1.Value值变化→
Check1.Value由1变0,触发Check1_Click(check2.value = 0)Check2.Value值变化→
Check2.Value由1变0,触发Check2_Click(check1.value = 0)→
Check1.Value值未变化,不触发Check1_Click,循环结束→
运行结束:Check1.Value = 0、Check2.Value=0。
以上括号内的代码为你程序设计的代码,这样的代码实际为一个循环触发,当你将Check设计为一个控件数组时,可能会到导致一个死循环(触发),所以不建议使用。
使用Timer之所以能够成功的原因是:Check的Click事件将会使两个Check进入循环状态(上述第二种情况),最终使两个Check均未选中,而Timer事件会使两个Check在均未选中的情况下,进入上述第一种情况,选中你点击的那个Check,不管该Check的当前状态是否选中,均将其选中。

Check的Value变动时将触发Click事件,但不会触发Mouse事件,可通过MouseUp、MouseDown或其组合来实现(建议使用控件数组,以下代码供参考,可在此基础上自行优化):
Private Sub Check1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
Check1_MouseUp Button, Shift, X, Y
End Sub

Private Sub Check2_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
Check2_MouseUp Button, Shift, X, Y
End Sub

Private Sub Check1_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
Check2.Value = 0
Check1.Value = 1 - Check1.Value
End Sub

Private Sub Check2_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
Check1.Value = 0
Check2.Value = 1 - Check2.Value
End Sub