问题描述:附上实验项目附件,本项目没有实际意义,只是为了测试问题。简化的一个项目。
表A中有一个窗口“信息”。
我的设计要求是:表A的姓名列不能为空,为此我设计了如下代码:
在窗口的beforclose事件中,代码如下:
以下内容为程序代码:
1 If e.closemode = 0 Then
2 Dim dt As DataTable = DataTables("A")
3 If dt.HasChanges = True Then
4 If MessageBox.Show("已修改记录,是否保存?", "提示", MessageBoxButtons.YesNo) = DialogResult.Yes Then
5 For Each r As Row In Tables("A").Rows
6 If r("姓名") = "" Then
7 MessageBox.Show("姓名不能为空,请重新填写!")
8 e.Cancel = True
9 Return
10 End If
11 Next
12 DataTables("A").Save()
13 MessageBox.Show("信息已保存!")
14 Else
15 DataTables("A").RejectChanges()
16 End If
17 End If
18 End If
19
设计思想是:如果是通过窗口上的X来关闭窗口的话,判断当前的表是不是被修改过了,如果没有修改则直接关闭。如果修改了,就询问用户是不是需要保存,如果不需要保存,则直接关闭,如果需要保存,就检查表中的姓名列有没有为空的,如果为空,则提示重新填写,同时禁止关闭窗口。
问题就出在红色部分。我模拟红色部分,同样的代码会出现两种情况:
第一种:打开我的附件,运行表中的窗口,在窗口中的表中右键添加一行,姓名留空不写,紧接着点窗口的X号,此时会提示("姓名不能为空,请重新填写!") ,按代码和我的要求,接着窗口不应该关闭的,然而此时却关闭了!
第二种:出现以上情况后,接着,点“窗口管理”中的设计,打开“窗口设计器”,此时找到Beforclose事件处,点开代码,打开“代码编辑器”窗口,记住不要对代码做任何修改,此时再关闭。然后再次运行“信息”窗口,这时再点窗口的X号,这时你会发现,窗口不会关闭的,而这样的才是正确的流程。
不要以为这样就好了,关闭项目,重复第一种的流程,这时你发现,窗口又被关闭了。!!!
怕狐爸不明白我说的是什么,写的有点多,希望能耐心看下去,还烦请狐爸告知是代码的问题,还是狐表的BUG??
还是怕我说的不明白,我又做了个动画,操作步骤就是上面我说的步骤。
此主题相关图片如下:1.gif
[此贴子已经被作者于2012-3-31 9:01:59编辑过]