以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- [推荐]切换主窗口前,如果数据没有保存,如何停止切换? (http://foxtable.net/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 但是现在窗口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 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 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楼的方式处理吧 |