checkbox没有locked,只有enabled.
如果你不想用,就在读取的时候就记住状态.
在click事件中.
check1.value=(状态)
记住状态值使用1或者0.

解决方案 »

  1.   

    把checkbox放在一个frame中。该frmae的enable属性设置为false,borderstyle属性设为none。
      

  2.   

    小朱的方法我试过了,能行
    但我不能理解的是
    为何不能在click事件以后判断其值,然后置反呢?就像我前面那段代码一样?
      

  3.   

    试试这个!Private Sub Check1_Click()
    If Check1.Value = 0 Then
     Check1.Value = 1
     Exit Sub
    End If
    …… '代码
    End Sub说明:
    .value=1时,Checkbox控件被选取
    .value=0时,checkbox控件取消选取
      

  4.   

    为何不能在click事件以后判断其值,然后置反呢?就像我前面那段代码一样?
    因为给checkbox赋值时会触发click事件,所以checkbox就被不停地改下去,直到溢出。
    当你用小朱的方法时,click事件执行两次,也就是checkbox被两次赋予同一个值。当然这无所谓了。
      

  5.   

    雨伞的方法我试过了,如果只判断一次是可行的,但如果判断两次又不行了。代码如下:有什么问题呢?
    If Check1.Value = 0 Then
    Check1.Value = 1
    Exit Sub
    End If
    If Check1.Value = 1 Then
    Check1.Value = 0
    Exit Sub
    End If
      

  6.   

    在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
      

  7.   

    补遗:
    通过判断更改的方法防止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。