使用狐表差不多一年左右了,也写了几个小项目,现就一些狐表编程的一些心得和大家分享一下:
一、事件驱动
什么叫做事件驱动?狐表中所有对象都有不同的事件,我们编程就是为不同的事件编写代码,以响应事件的发生,达到我们的编程目的。
在编写事件驱动的代码时,大家要注意一个原则,就是在事件处理的代码中不应该有触发该事件的代码。
怎么理解呢?下面举一个例子:
论坛上有一个帖子是关于模式窗口的,楼主的本意是,在窗口退出时,提示用户是否退出,如果是,就退出项目,如果否就返回窗口。为达到目的,楼主在窗口的beforeclose事件中写了如下的代码:
If MessageBox.Show("退出吗?","提示",MessageBoxButtons.YesNo,MessageBoxIcon.Question) = 6
Syscmd.Project.Exit()
Return
Else
e.Cancel = True
End If
表面上看,这段代码时没有问题的,但实际上执行时就会发现:当你点是的时候,程序陷入了死循环状态
为什么呢?
原因就是,这段代码本身是处理beforeclose事件的,而执行这段代码的时候,窗口还没有关闭,因此,
当 Syscmd.Project.Exit()执行的时候,又会引发另一个beforeclose事件,所以就陷入了死循环当中。
正确的写法应该是这样:
在beforeclose事件中写:
If MessageBox.Show("退出吗?","提示",MessageBoxButtons.YesNo,MessageBoxIcon.Question) = DialogResult.no '当用户点击否的时候
e.Cancel = True '返回窗口
End If
在afterclose事件中写:
Syscmd.Project.Exit()
这样就不会发生错误了。
(未完待续)