禁用基于其他值的复选框

时间:2009-03-03 16:00:26

标签: ms-access

我有一个相对简单的连续表格。有一个看不见的复选框,我们称之为弗兰克。

第二个复选框(Ralph)可能是真或假。还有一个带日期的文本框(RalphDate)。

如果Frank是True,我不希望用户能够更改Ralph或RalphDate,无论其中是什么。

现在,RalphDate很简单,因为我只使用条件格式来检查Frank的值,该值可以启用或禁用RalphDate。此选项不适用于复选框。

我现在卡住了,因为使用一些Visual Basic会根据它遇到的第一个Frank值的值设置所有Ralph框的状态。因此,问题是如何禁用基于Frank Check Box为True的相关Ralph Check Box?

4 个答案:

答案 0 :(得分:4)

解决方案1 ​​

  • 为ckRalph更新Locked属性而不是Enabled
  • 在表单的OnCurrent()事件处理程序中执行此操作。

Locked属性将阻止没有视觉提示的更改。 这应该照顾功能部分,即使在视觉上复选框仍然看起来启用,它也无法更改。

解决方案2

另一种方法是通过这样做来模拟复选框:

  • 使用文本框,称之为fakeckRalph;把它变成一个小广场。
  • 使其记录来源属性类似于“=getstate()
  • 创建一个getstate函数,其功能类似于:

    Public Function GetState() as string
        GetState = iif(ckRalph, "V", " ")
    End Function
    

我建议使用符号字体和字符使得勾号在其框中显示得更好 现在,如果您的 Ralph 为真,则复选框将显示勾号,如果不是,则为空。

要完成此操作,请在 Franck 为真时在文本框上使用条件格式将其禁用。
要使点击更逼真,​​还可以将光标更改为手形指针。

最后需要的是从我们的fakeckRalph文本框中连接OnClick事件,以便我们可以切换Ralph的状态并正确显示它:

Private Sub OnClick()
    Ralph = Not Ralph
    fakeckRalph.Requery
End Sub

我使用类似的技术来显示连续表单上的记录是否被锁定(使用其中一种Windings字体的蓝色挂锁符号)或者是否可删除,并且可以单击一个大红叉:

image 2 http://img9.imageshack.us/img9/6296/sshot2do5.png image 1 http://img8.imageshack.us/img8/4997/sshot1ya5.png

答案 1 :(得分:1)

这是连续形式的缺点之一,并且无法绕过它。

一般情况下,我会避免使用可编辑的连续表单 - 我只使用它们来显示列表,并使用链接到连续表单PK的可编辑子表单来显示当前数据以进行编辑。

这避免了条件显示特定控件的所有问题,因为您只是以连续形式显示数据,并且可以精确控制单个细节子表单中可见/启用的内容。

答案 2 :(得分:0)

简短的回答是,如果您使用连续表格,则不能这样做。更改控件的设置会更改所有行。

答案 3 :(得分:0)

将Ralph的控制源设置为函数,例如=GetCheckState()。然后创建一个这样的函数:

Public Function GetCheckState() as boolean
    If Frank then
        GetCheckState = True
    Else
        GetCheckState = False
    End If
End Function

这将根据Frank控制是否检查Ralph。由于复选框已绑定到该函数,因此不会让您通过单击更改该值。

要对用户点击该框做出反应,请将代码添加到On Mouse Up事件:

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事件似乎完全被忽略,因此您必须使用On Mouse Up(如果您愿意,也可以使用On Mouse Down)。如果您希望该框检查用户何时按空格键或输入密钥,您还可以向KeyDown事件添加类似的代码。

唯一的缺点是:

  • 如果无法点击该框,则该框不会显示为灰色。
  • Access将在状态栏中显示一条消息,指出无法编辑该控件,因为该控件在单击时被绑定。

对于第一点,如果您认为人们会感到困惑,您可以弹出一条解释它的消息。对于第二种,可能有一种解决方法,但我找不到它。即使我在Mouse Down和Mouse Up事件中尝试设置自己的状态消息,该消息仍会显示。

如果禁用该框时灰色显示对您来说非常重要,那么这将无效,但我对接受的答案中建议的“模拟”复选框的外观感觉不满意。这种方法允许我根据其他记录控制复选框的功能,仍然使用实际的复选框。