3

在以下 Rebol 2 代码中,为什么按钮a在单击 5 秒后变为可见,而在单击按钮后 5 秒保持隐藏状态b

f: does [hide a wait 5]

view layout [
    a: button "a" [f]
    b: button "b" [f]
]
4

2 回答 2

2

它看起来像一个错误

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 ]
]
于 2015-08-28T06:47:46.293 回答
1

当每个按钮被点击时,它会被重绘成看起来“按下”,并保持“按下”状态直到action完成。然后,在它action完成后,按钮被重绘为“未按下”。

在 buttona的过程action中,它是隐藏的,但是当它action完成时,它会在它的“未按下”状态被绘制时再次显示。根据hide 的这个功能总结hide只有“暂时从视图中移除人脸”,以及“下次直接或通过其父人脸之一间接显示该人脸时,该人脸将再次可见。”</p>

在 buttonb的过程action中, buttona是隐藏的,但是当 buttonbaction完成时,它是 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]]
于 2015-08-28T10:59:34.327 回答