Office中国论坛/Access中国论坛

标题: 碰到个Bug大家教教我怎么破 [打印本页]

作者: lazybird    时间: 2015-4-28 16:01
标题: 碰到个Bug大家教教我怎么破
本帖最后由 lazybird 于 2015-4-28 17:04 编辑

窗体A - 显示所有订单数据列表,其中一字段为“订单状态”。
窗体B - 显示订单明细

双击窗体A中订单号字段打开窗体B,当订单状态为“Open”时,订单可修改,“Close”时不可修改,代码为:

Private Sub Form_Load()
  Select Case Me.Status
  Case "Open"
     Me.Form.AllowEdits = True
  Case "Close"
     Me.Form.AllowEdits = False
  End Select
End Sub

测试时,发现一个Bug,只要不关闭窗体B,返回窗体A打开另一个订单时并不会重新执行这段程序。
例如,先打开一个“Open”的订单,进入可以修改的状态,不关闭窗体B。接着从窗体A再打开一个“Close”的订单,则订单仍然是可修改的。

把这段代码加到别的事件,如 Form Open, Active, Current, 都没有用。

做了个例子发现上传不了(公司屏蔽了),麻烦各位老师帮看看。


作者: todaynew    时间: 2015-4-28 16:25
仔细看看代码就知道错在什么地方了。
作者: lazybird    时间: 2015-4-28 17:04
Private Sub Form_Load()
   Select Case Me.Status
   Case "Open"
      Me.Form.AllowEdits = True
   Case "Close"
      Me.Form.AllowEdits = False   (笔误,不好意思,我实际代码是对的,这个不是原因)
   End Select
End Sub


作者: todaynew    时间: 2015-4-28 17:25
本帖最后由 todaynew 于 2015-4-28 17:28 编辑
lazybird 发表于 2015-4-28 17:04
Private Sub Form_Load()
   Select Case Me.Status
   Case "Open"

在Select Case语句前,加Msgbox me.Status
在End select 语句后,加msgbox me.form.allowedits

此外代码可以简写为:
Me.Form.AllowEdits=me.Status.value="Open"


作者: lazybird    时间: 2015-4-29 08:47
没有解决啊,原因是窗体B没有锁定为当前窗体,必须退出然后重新打开才能执行这段程序。
但我又不想锁定,因为有时要到别的窗体拷贝东西。

作者: todaynew    时间: 2015-4-29 12:15
lazybird 发表于 2015-4-29 08:47
没有解决啊,原因是窗体B没有锁定为当前窗体,必须退出然后重新打开才能执行这段程序。
但我又不想锁定, ...

用激活或者获得焦点事件不就完事了




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