2009-03-03 100 views
4

我有一个相对简单的连续窗体。有一个看不见的复选框,我们称之为弗兰克。基于其他值禁用复选框

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

如果Frank是真的,我不希望用户能够更改Ralph或RalphDate,而不管已经存在的是什么。

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

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

回答

4

解决方案1 ​​

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

锁定属性将防止没有视觉提示的更改。 这应该照顾的功能部分,即使目视复选框仍然看起来启用,它不能改变。

解决方案2

另一种方式是这样做是为了模拟的复选框:

  • 使用文本框,把它fakeckRalph;使它成为一个小广场。
  • 使其记录源属性像“=getstate()
  • 创建一个getstate函数,它是这样的:

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

我建议使用符号字体和字符,使蜱出现在盒子里更好。
所以,现在,如果您的拉尔夫为真,该复选框将显示标记,如果不是,它将是空的。

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

是更多有需要的最后一件事就是从我们fakeckRalph文本框接线OnClick事件,使我们可以切换拉尔夫的状态并正确显示:

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

我有用户类似的技术来显示是否连续窗体上的记录被锁定或删除的(从绕组一种字体使用蓝色挂锁符号),一个大红色的叉,可以被点击:

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

+0

解决方案2真的很聪明!解决方案1没有给我以后的东西。我花了一点时间来研究解决方案2的逻辑,我很高兴我做到了。现在我已经掌握了它,我怀疑我会找到更多的用于这个“诀窍”的用法。谢谢! – Humpton 2009-03-03 19:20:29

0

简短的答案是你不能这样做,如果你使用连续的形式。更改控件的设置会更改所有行的设置。

1

这是连续形式的缺点之一,并且没有办法绕过它。一般来说,我避免了可编辑的连续表单 - 我只用它们来显示一个列表,并使用一个可编辑子表单连接到连续表单的PK来显示当前数据以进行编辑。

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

0

将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事件中设置自己的状态消息时,该消息仍然显示。

如果在禁用时出现灰色框对您非常重要,那么这将无法正常工作,但我对在接受的答案中提出的“模拟”复选框的外观感觉不满。该方法允许我根据其他记录控制复选框的功能,并仍使用实际的复选框。