以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  beforeclose事件问题  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=141551)

--  作者:lshshlxsh
--  发布时间:2019/10/4 9:17:00
--  beforeclose事件问题
请老师帮忙看一下 下面这段代码 写在模式窗口 beforeclose 事件  能弹出  请先保存数据后,再关闭 
但是窗口 还是关闭了   感觉  e.Cancel =True  这句代码失灵了  这个问题有时候出现  有时候不出现 ,只要出现过一次  第二次还是会出现  进入编辑窗口 未做任何修改 再次打开 就不会关闭
    在好多台电脑都出现这个问题  


If DataTables("表A").HasChanges =True Or DataTables("表B").HasChanges =True Then
    If  Tables("表B").Rows.Count =0 Then
        DataTables("表A").RejectChanges()
        DataTables("表B").RejectChanges()
    Else
        Dim Result As DialogResult
        Result= messagebox.Show("数据有变动,请保存!","提示",MessageBoxButtons.YesNo,MessageBoxIcon.Warning)
        If Result=DialogResult.no Then
            DataTables("表A").RejectChanges()
            DataTables("表B").RejectChanges()
        ElseIf Result=DialogResult.yes Then
            MessageBox.Show("请先保存数据后,再关闭!")
            e.Cancel =True
        End If
    End If
End If

[此贴子已经被作者于2019/10/4 9:49:24编辑过]

--  作者:狐狸爸爸
--  发布时间:2019/10/4 10:00:00
--  
按照你的代码逻辑,点击"否",撤销修改并关闭窗口,点击是,提示保存并禁止关闭窗口。
我测试也是如此,没有问题。

有问题的是你的逻辑,请先理清楚。

--  作者:lshshlxsh
--  发布时间:2019/10/4 10:04:00
--  
谢谢狐狸爸爸  我要实现的效果 点 是  弹出 不关闭窗口 
现在的问题是 我点了是 有时候 不关闭 有时候 直接关闭窗口了 


Dim Result As DialogResult
Result= messagebox.Show("数据有变动,请保存!","提示",MessageBoxButtons.YesNo,MessageBoxIcon.Warning)
If Result=DialogResult.no Then
    DataTables("表A").RejectChanges()
    DataTables("表B").RejectChanges()
ElseIf Result=DialogResult.yes Then
    MessageBox.Show("请先保存数据后,再关闭!")
    e.Cancel =True
End If
[此贴子已经被作者于2019/10/4 10:06:07编辑过]

--  作者:fangdejin
--  发布时间:2019/10/4 10:13:00
--  
代码写的不对啊,逻辑错了。  变动什么  第一句true  然后 else  有变动  自己打自己
--  作者:lshshlxsh
--  发布时间:2019/10/4 10:21:00
--  
谢谢   如果逻辑错 是不会弹出的   现在的问题是 弹出  还关闭窗口
--  作者:fangdejin
--  发布时间:2019/10/4 10:28:00
--  
Dim n As Integer = Tables("客户联系人").Rows.Count
If  n> 0 Then
    If Tables("客户联系人").Current.DataRow.RowState <> DataRowState.Unchanged Then \'如果当前行已经修改过
        Dim Result As DialogResult
        Result = MessageBox.Show("当前行数据已经修改是否保存", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Question)
        If Result = DialogResult.Yes Then
            Tables("客户联系人").Current.save
            MessageBox.Show("数据已经保存","提示")
        Else
            e.Cancel = True
            MessageBox.Show("没有修改原始数据!","提示")
        End If
    End If
Else
  MessageBox.show("数据已经删除!")
End If
Tables("客户联系人").filter=""

--  作者:fangdejin
--  发布时间:2019/10/4 10:30:00
--  
给一个客户做的,这个更好用。

图片点击可在新窗口打开查看此主题相关图片如下:qq图片20191004102910.png
图片点击可在新窗口打开查看

--  作者:狐狸爸爸
--  发布时间:2019/10/4 10:30:00
--  
我之前测试了没有问题,点击否关闭窗口,点击是提示保存数据后拒绝关闭窗口,完全符合你的设计逻辑:

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:管理项目143.table



--  作者:bobolan521
--  发布时间:2019/10/4 12:02:00
--  
这个感觉像软件的BUG,代码逻辑是没有问题 的,因为大部分情况下都是可以正常执行的,莫名奇妙的会出现几次,而且一旦出现,所有的e.cancel= true
都会失灵,除非重启项目

--  作者:lshshlxsh
--  发布时间:2019/10/4 14:13:00
--  

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:20191004_140900.zip

附件为操作视频

以下为beforeclose事件代码

If DataTables("出入库主表").HasChanges =True Or DataTables("出入库明细表").HasChanges =True Then
    If  Tables(e.Form.Name & "_制单表").Rows.Count =0  Then
        DataTables("出入库主表").RejectChanges()
        DataTables("出入库明细表").RejectChanges()
    Else
        Dim Result As DialogResult
        Result= messagebox.Show("数据有变动,请保存!","提示",MessageBoxButtons.YesNo,MessageBoxIcon.Warning)
        If Result=DialogResult.no Then
            DataTables("出入库主表").RejectChanges()
            DataTables("出入库明细表").RejectChanges()
        ElseIf Result=DialogResult.yes Then            
            MessageBox.Show("请先保存数据后,再关闭!")
            e.Cancel =True 
        End If
    End If
End If
[此贴子已经被作者于2019/10/4 14:26:09编辑过]