以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  [推荐]切换主窗口前,如果数据没有保存,如何停止切换?  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=92087)

--  作者:ezgame
--  发布时间:2016/10/25 22:34:00
--  [推荐]切换主窗口前,如果数据没有保存,如何停止切换?

有两个类型为“主窗口”的窗口(窗口1、窗口2),分别通过两个按钮来打开(按钮1、按钮2,通过执行Forms("窗口").open 来打开)。

在窗口1 的 BeforeClose事件中写了如果数据修改过,不能关闭:

If CurrentTable.Current.DataRow.RowState <> DataRowState.Unchanged Then 

    e.Cancel = True
End If

但是现在窗口1打开,并且修改数据没保存的情况下,点击“按钮2”,依然能打开窗口2,发现上面代码中 e.Cancel = True 并没有生效。

 

请问应该如何实现我想要的效果,就是在一个主窗口数据没有保存的情况下,不能打开另一个主窗口。


--  作者:有点蓝
--  发布时间:2016/10/25 22:42:00
--  
打开窗口2的时候窗口1并没有关闭,自然不会触发事件,就算触发e.Cancel = True也只是阻止窗口1 关闭,并不能阻止窗口2 打开

按钮2事件

If CurrentTable.Current.DataRow.RowState <> DataRowState.Unchanged Then 

    return
End If

Forms("窗口2").open


--  作者:ezgame
--  发布时间:2016/10/25 23:06:00
--  
以下是引用有点蓝在2016/10/25 22:42:00的发言:
打开窗口2的时候窗口1并没有关闭,自然不会触发事件,就算触发e.Cancel = True也只是阻止窗口1 关闭,并不能阻止窗口2 打开

按钮2事件

If CurrentTable.Current.DataRow.RowState <> DataRowState.Unchanged Then 

    return
End If

Forms("窗口2").open

我在 e.Cancel = True 前面加了 MessageBox() 代码来测试过的,点击按钮2 来打开窗口2的时候,是能弹出消息框的,说明此时是触发了关闭窗口1这个动作的,因此才会执行 BeforeClose 事件中的代码。

 

另外我看了帮助文档中 窗口类型这个章节,其中有这么一句:

每个表只能打开一个主窗口,打开一个新的主窗口,之前的主窗口会自动关闭。”

 

窗口1应该是关闭了的,看来这种情况下 e.Cancel = True 没有生效。

 

我先试试加上你给的代码,谢了先


--  作者:有点蓝
--  发布时间:2016/10/25 23:21:00
--  
每个表只能打开一个主窗口  -- 问题是你的2个窗口是属于同一个表还是2个表
--  作者:ezgame
--  发布时间:2016/10/25 23:26:00
--  
以下是引用有点蓝在2016/10/25 23:21:00的发言:
每个表只能打开一个主窗口  -- 问题是你的2个窗口是属于同一个表还是2个表

是属于同一个表的


--  作者:有点蓝
--  发布时间:2016/10/26 8:45:00
--  
测试了一下,确实不起作用。还是按照2楼的方式处理吧