在以下 Rebol 2 代码中,为什么按钮a
在单击 5 秒后变为可见,而在单击按钮后 5 秒保持隐藏状态b
?
f: does [hide a wait 5]
view layout [
a: button "a" [f]
b: button "b" [f]
]
它看起来像一个错误
view layout [
a: button "hide me" [ hide face ]
b: button "hide a" [ hide a ]
]
除非从另一个按钮调用隐藏,否则隐藏“ a”按钮不起作用。您的等待 5必须触发布局更新,以便按钮消失。
而不是wait 5,使用do-events (wait []) 保持按钮隐藏。
view layout [
a: button "hide me" [ hide face do-events ]
b: button "hide a" [ hide a ]
]
当每个按钮被点击时,它会被重绘成看起来“按下”,并保持“按下”状态直到action
完成。然后,在它action
完成后,按钮被重绘为“未按下”。
在 buttona
的过程action
中,它是隐藏的,但是当它action
完成时,它会在它的“未按下”状态被绘制时再次显示。根据hide 的这个功能总结,hide
只有“暂时从视图中移除人脸”,以及“下次直接或通过其父人脸之一间接显示该人脸时,该人脸将再次可见。”</p>
在 buttonb
的过程action
中, buttona
是隐藏的,但是当 buttonb
的action
完成时,它是 buttonb
被重绘为“未按下”。此时,按钮a
未被触及并保持隐藏状态。
考虑 Graham Chiu 的代码:
view layout [
a: button "hide me" [ hide face do-events ]
b: button "hide a" [ hide a ]
]
a
在这种情况下,按钮被点击后仍然隐藏的原因是它action
直到窗口关闭才完成。ifwait 5
表示点击按钮时需要执行的代码,需要放在前面do-events
。否则在窗口关闭之前不会执行。
view layout [
a: button "hide me and print" [
hide face
print "I need to say this when clicked."
do-events
print "I can wait until the window is closed."
]
b: button "hide a" [ hide a ]
]
可以在此页面的子标题下找到一些其他使按钮隐藏的方法:“隐藏自身”。例如:
view l: layout [b: button [b/show?: false unview/all view l]]