Office中国论坛/Access中国论坛

标题: 为什么不能在一个控件的更新前事件中锁定另外一个控件? [打印本页]

作者: rjacky    时间: 2007-9-3 15:01
标题: 为什么不能在一个控件的更新前事件中锁定另外一个控件?
例如现在有两个非绑定控件 组合框0 和 文本框1,在组合框0的更新前事件加入以下代码

Private Sub 组合0_BeforeUpdate(Cancel As Integer)
   
    Me.文本1.Locked = True

End Sub


然后在 组合框0 中输入任意字符,就会出现运行时错误'2166'  

请问哪位知道为什么这样呢,是微软的限制设定,还是vba的bug?
作者: 一点通    时间: 2007-9-3 16:52
非绑定的文本框是不能锁定的, 可以使用失效的办法来处理
Private Sub 组合0_BeforeUpdate(Cancel As Integer)
   
    Me.文本1.Enabled = False

End Sub
作者: rjacky    时间: 2007-9-3 17:42
好像和是否绑定没有关系,如果将代码放在更新后事件就能正常锁定了,为什么会有这么奇怪的结果呢?

我的那个控件不能用失效来处理,所以现在只能定义一个全局布尔变量X,在组合框0的更新前事件中,如果输入内容符合一个很复杂有几百行代码的条件,组合框就允许更新,X=true;不符合条件,组合框不允许更新,X=false。

然后在组合框0的更新后事件中,根据变量值来判断是否锁定(如果不用全局变量的话,那些条件就得重新在更新后事件中再粘贴一次进行判断)。这么简单的一个功能要通过这么复杂的方法来实现,郁闷啊
作者: Henry D. Sy    时间: 2007-9-3 22:12
既然要在组合框更新前就锁定,不如在窗体加载时锁定,然后根据组合框更新后的值,判断打开还是不打开文本框的锁定。
作者: Henry D. Sy    时间: 2007-9-3 22:29
也可以在属性里,将text0=locked
然后,根据组合框的值来判断开或是关
Private Sub Combo2_AfterUpdate()
If Me.Combo2 = 1 Then
Me.Text0.Locked = False
Else
Me.Text0.Locked = True
End If
End Sub

为什么不能在一个控件的更新前事件中锁定另外一个控件?
主要原因是:当有数据处于编辑状态,不能锁定控件。

[ 本帖最后由 dddddd 于 2007-9-3 22:31 编辑 ]




欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3