试试这个!Private Sub Check1_Click() If Check1.Value = 0 Then Check1.Value = 1 Exit Sub End If …… '代码 End Sub说明: .value=1时,Checkbox控件被选取 .value=0时,checkbox控件取消选取
雨伞的方法我试过了,如果只判断一次是可行的,但如果判断两次又不行了。代码如下:有什么问题呢? If Check1.Value = 0 Then Check1.Value = 1 Exit Sub End If If Check1.Value = 1 Then Check1.Value = 0 Exit Sub End If
在check1_click事件中(其它check1事件好像也行),check1.value的值改变一次,就会引发一次check1_click事件 看看代码就知道了 Option Explicit Dim x As IntegerPrivate Sub Check1_Click() x = x + 1 Print x If Check1.Value = vbChecked Then Check1.Value = vbUnChecked ElseIf Check1.Value = vbUnchecked Then Check1.Value = vbChecked End If End Sub
补遗: 通过判断更改的方法防止checkbox被更改并非不可行,关键是避开click事件,例如:Private Sub Check1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) Check1.Value = 1 Xor Check1.Value End Sub用数字1来异或,就是使1为0,使0为1。
但我不能理解的是
为何不能在click事件以后判断其值,然后置反呢?就像我前面那段代码一样?
If Check1.Value = 0 Then
Check1.Value = 1
Exit Sub
End If
…… '代码
End Sub说明:
.value=1时,Checkbox控件被选取
.value=0时,checkbox控件取消选取
因为给checkbox赋值时会触发click事件,所以checkbox就被不停地改下去,直到溢出。
当你用小朱的方法时,click事件执行两次,也就是checkbox被两次赋予同一个值。当然这无所谓了。
If Check1.Value = 0 Then
Check1.Value = 1
Exit Sub
End If
If Check1.Value = 1 Then
Check1.Value = 0
Exit Sub
End If
看看代码就知道了
Option Explicit
Dim x As IntegerPrivate Sub Check1_Click()
x = x + 1
Print x
If Check1.Value = vbChecked Then
Check1.Value = vbUnChecked
ElseIf Check1.Value = vbUnchecked Then
Check1.Value = vbChecked
End If
End Sub
通过判断更改的方法防止checkbox被更改并非不可行,关键是避开click事件,例如:Private Sub Check1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
Check1.Value = 1 Xor Check1.Value
End Sub用数字1来异或,就是使1为0,使0为1。