关于事件的一些奇怪现象

httplee 2011-02-17 08:11:54
建立一个form,里面放2个command控件,一个命名为:cmd1,另一个命名为cmd2。
在cmd2的when事件里写入以下代码:

IF TYPE('thisform.activecontrol')=='O'
messagebox('!')
endif

方法1:执行FORM,CMD1首先获得焦点,然后用鼠标点cmd2,立刻弹出对话框!
方法2:再次让CMD1获得焦点,然后按tab键盘,cmd2获得焦点,但是没有弹出对话框!

事实上是:在cmd2执行when的时候thisform.activecontrol不是一个控件,即FORM中没有任何控件获得焦点。
在方法1里事件发生的顺序为:valid>when>lostfocus>gotfocus
而到了方法2里事件发生的顺序就变为了valid>lostfocus>when>gotfocus

这个问题在VFP的《Visual FoxPro 的事件次序》里有例子说明,不过估计没有多少人认真看鼠标改变焦点和TAB改变焦点时的事件顺序变化。VFP,有时还真是不可思议。
...全文
95 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
-晴天 2011-02-23
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 msailsoft 的回复:]
哎。。。

VFP中的技术估计用了大概不到一半,就已经花去了我十年时间;它似乎已经让我几乎可以说学无止境了。。。

而后面由于公司的原因,我用VFP的时间会越来越少;

真想有机会,再用VFP做它所有能做的经典的事情!(这或许就是我对它十年来产生的一份感情吧。。。)
[/Quote]
之所以花去你十年时间(也花去了我十年时间),是因为它太麻烦了,不规范,没标准,继承了dbase那一套不肯放,又要想同时抓住SQL标准,既想做数据库的东西,又带上了面向对象程序设计/对象库和编译器,结果到最后,掉电还是会损坏dbf表,该做的没做好,不该做的使劲做!
我五年前已经和它说再见了,现在去碰它,只是以前的应用人家出了问题找来才看看.

如果想做数据库,还是好好钻研SQL吧...
httplee 2011-02-23
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 aabiao 的回复:]
tooltiptext不用,还要自己造提示?
有了lostfocus,When没啥用了,只是为了保持与DOS版本的When参数一直而已。
[/Quote]

那可不见得,不说when,valid就是个很有用的事件。在VFP9里还特别设置了return object新参数。

在做一些动画界面时when和valid、lostfocus、gotfocus事件共同形成动画必须的参数。
蓝海 2011-02-21
  • 打赏
  • 举报
回复
哎。。。

VFP中的技术估计用了大概不到一半,就已经花去了我十年时间;它似乎已经让我几乎可以说学无止境了。。。

而后面由于公司的原因,我用VFP的时间会越来越少;

真想有机会,再用VFP做它所有能做的经典的事情!(这或许就是我对它十年来产生的一份感情吧。。。)
aabiao 2011-02-21
  • 打赏
  • 举报
回复
tooltiptext不用,还要自己造提示?
有了lostfocus,When没啥用了,只是为了保持与DOS版本的When参数一直而已。
十豆三 2011-02-18
  • 打赏
  • 举报
回复
越学越多,学的越多,疑问越多,越来越有意思!
蓝海 2011-02-18
  • 打赏
  • 举报
回复
没有试过,不过这说明,触发事件的源或对象(或键盘或鼠标)不同,事件发生的顺序也不同;也不是没有可能!

都市夜猫 2011-02-18
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 httplee 的回复:]
还有更过分的:bindevent(),永远都只发生在绑定事件发生之前,而不能是同时或之后。
[/Quote]
那倒不是
bindevent 函数有个 nFlag 形参,可以设定代理方法的调用顺序是发生在原生事件之前还是之后。
httplee 2011-02-18
  • 打赏
  • 举报
回复
还有更过分的:bindevent(),永远都只发生在绑定事件发生之前,而不能是同时或之后。

2,722

社区成员

发帖
与我相关
我的任务
社区描述
VFP,是Microsoft公司推出的数据库开发软件,用它来开发数据库,既简单又方便。
社区管理员
  • VFP社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧