Rebol/Red VID疑问:为何关闭事件会被立即触发?
解决REBOL中窗口关闭事件被立即触发的问题
我来帮你搞定这个问题~你遇到的情况是因为你写的query-on-close函数没有对事件类型做过滤,导致任何事件触发时都会执行它,包括窗口刚初始化完成的那个事件,所以才会一运行就打印"query-on-close",而不是等你点关闭按钮。
咱们来修改一下代码,让它只响应关闭事件:
query-on-close: func[face event][ ; 只处理关闭类型的事件 if event-type? event = 'close [ print "query-on-close" remove-event-func :query-on-close ] RETURN event ] view layout [ do [ insert-event-func :query-on-close ] ]
核心改动就是加了if event-type? event = 'close这个判断:
event-type? event会获取当前事件的类型,比如窗口创建、鼠标点击、窗口关闭等- 只有当事件类型是
'close(也就是点击窗口关闭按钮触发的事件)时,才会执行打印和移除事件函数的逻辑 - 其他事件触发时,函数会直接返回事件,不会执行额外操作
这样修改后,你运行代码时,只有点击窗口的关闭按钮,才会看到"query-on-close"的输出,完全符合你的预期啦。
内容的提问来源于stack exchange,提问作者user310291
相关产品推荐
相关产品推荐

