2015-08-28 22 views
3

在下面的Rebol 2代碼中,爲什麼按鈕a在點擊5秒後變爲可見,而在點擊按鈕b後5秒保持隱藏?爲什麼一個按鈕隱藏自己和另一個不同?

f: does [hide a wait 5] 

view layout [ 
    a: button "a" [f] 
    b: button "b" [f] 
] 
+0

您不應該在GUI中使用'wait' action.WAIT運行事件循環,並且您已經在其中,這是有問題的。 – rebolek

回答

2

它看起來像

view layout [ 
    a: button "hide me" [ hide face ] 
    b: button "hide a" [ hide a ] 
] 

除非隱藏從另一個按鈕叫不工作隱藏「一」按鈕的錯誤。您的等待5必須觸發佈局的更新,以便按鈕消失。使用do-events(wait [])使按鈕隱藏。

view layout [ 
    a: button "hide me" [ hide face do-events ] 
    b: button "hide a" [ hide a ] 
] 
+0

相反,我不認爲按鈕會消失,而是觸發更新,我認爲'wait 5'正在推遲更新,以便按鈕保持隱藏狀態。如果沒有「等待5」,該按鈕將被隱藏,然後再次顯示得太快,以至於看不到它曾經隱藏過。我想我可能已經弄清楚爲什麼現在再次顯示,所以我發佈了一個答案。謝謝。 – WiseGenius

1

如果單擊各個按鈕,它是重繪看「壓」,並保持「按下」直到action已完成。然後,在action完成後,該按鈕將重新繪製爲「未按下」。

在按鈕aaction中,它被隱藏,但是當它的action完成時,它會在繪製「未按下」狀態時再次顯示。據this function summary of hidehide只有「暫時刪除從視圖中的臉」,和「該臉部將再次變得可見在下一次面被示出直接或間接地通過它的父面中的一個」。

在按鈕b' s action,按鈕a被隱藏,但是當按鈕baction完成時,按鈕b被重畫爲「未按下」。此時,按鈕a未觸動,仍然隱藏。

考慮格雷厄姆邱代碼:

view layout [ 
    a: button "hide me" [ hide face do-events ] 
    b: button "hide a" [ hide a ] 
] 

在這種情況下,爲什麼按鈕a保持被點擊之後隱藏的原因是,直到窗口關閉時,其action沒有達到完成。如果wait 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 ] 
] 

一些其他的方式,使一個按鈕,隱藏自身可以this page小標題下找到「隱藏自我」。例如:

view l: layout [b: button [b/show?: false unview/all view l]] 
+0

如果您單擊按鈕面並按住鼠標按鈕,則將鼠標移開,操作不會啓動。所以,該動作由一個鼠標左鍵按鈕事件啓動。隱藏發生,臉部隱藏,動作完成,然後視圖必須更新面部忽略節目?標誌以便臉部再次顯示。 –

相關問題