将Ralph的控制源设置为函数,如=GetCheckState()
。然后创建一个这样的功能:
Public Function GetCheckState() as boolean
If Frank then
GetCheckState = True
Else
GetCheckState = False
End If
End Function
这将控制是否检查拉尔夫基于弗兰克。由于复选框绑定到该函数,因此不会让您通过单击来更改该值。
反应到用户单击该框,将代码添加到在鼠标释放事件:
Private Sub Ralph_MouseUp(Button As Integer, Shift As Integer, _
X As Single, Y As Single)
If Button = acLeftButton And Not Frank Then
Frank = True
End If
Ralph.Requery
End Sub
Click事件似乎被完全忽略当控制源是一个函数,所以你必须使用在用鼠标代替(如果你喜欢的话,也可以在Mouse Down上工作)。如果您希望方框检查用户何时按空格键或输入密钥,您还可以向KeyDown事件添加类似的代码。
唯一的缺点是:
- 盒子是不是灰色的,当它不能被点击。
- 访问将在状态栏中显示一条消息,表示该控件无法被编辑,因为它被点击时绑定的表达式。
对于第一点,如果您认为人们会感到困惑,您可以弹出一条消息来解释它。对于第二种,可能有解决方法,但我找不到它。即使在我尝试在Mouse Down和Mouse Up事件中设置自己的状态消息时,该消息仍然显示。
如果在禁用时出现灰色框对您非常重要,那么这将无法正常工作,但我对在接受的答案中提出的“模拟”复选框的外观感觉不满。该方法允许我根据其他记录控制复选框的功能,并仍使用实际的复选框。
来源
2016-06-10 21:21:32
Kat
解决方案2真的很聪明!解决方案1没有给我以后的东西。我花了一点时间来研究解决方案2的逻辑,我很高兴我做到了。现在我已经掌握了它,我怀疑我会找到更多的用于这个“诀窍”的用法。谢谢! – Humpton 2009-03-03 19:20:29