程序的目的是有4个CheckBox和4个Label,点击选中的CheckBox和相应的Label的BackColor会改变,其它的BackColor设为白色。代码如下,但是运行时会出现“堆栈空间溢出”,请问有办法解决吗?Private Sub CheckBox1_Click()If CheckBox1.Value = True Then   CheckBox1.Value = False
   
Else   CheckBox1.Value = True
   
End IfCheckBox1.BackColor = &HF740FB
Label1.BackColor = &HF740FB ‘这一步提示“堆栈空间溢出”CheckBox2.BackColor = &HFFFFFF
Label2.BackColor = &HFFFFFFCheckBox3.BackColor = &HFFFFFF
Label3.BackColor = &HFFFFFFCheckBox4.BackColor = &HFFFFFF
Label4.BackColor = &HFFFFFFEnd Sub

解决方案 »

  1.   

    修改 CheckBox1.Value 时引起了事件重入。解决方法是用变量来标识。如:Private Sub CheckBox1_Click()
        
        Static bFlag    As Boolean
        
        If bFlag Then
            
            Exit Sub
            
        End If
        
        bFlag = True
        
        If CheckBox1.Value = vbChecked Then
            CheckBox1.Value = vbUnchecked
        Else
            CheckBox1.Value = vbChecked
        End If
        
        CheckBox1.BackColor = &HF740FB
        Label1.BackColor = &HF740FB
        
        CheckBox2.BackColor = &HFFFFFF
        Label2.BackColor = &HFFFFFF
        
        CheckBox3.BackColor = &HFFFFFF
        Label3.BackColor = &HFFFFFF
        
        CheckBox4.BackColor = &HFFFFFF
        Label4.BackColor = &HFFFFFF
        
        bFlag = False
        
    End Sub
      

  2.   

    CheckBox每点一下都会自动切换 Value 值,你再将它反过来什么目的?
    想保持不变直接设它的 Enabled = False 好了。
      

  3.   

    If CheckBox1.Value = True Then  CheckBox1.Value = False
     
    Else  CheckBox1.Value = True
     
    End If 同上,看不懂,点了T把它变成F,点了F把它变成T,倒不如改变一开始的初值
      

  4.   

    了解了“修改 CheckBox1.Value 时引起了事件重入”非常感谢大家~原来是自己多此一举,不是想用语句改变CheckBox1.Value,而只是想设定判定数的,即:
    If CheckBox1.Value = True Then   K=1Else   K=0End If 再次感谢阿花!!!呵呵~