2016-04-24 117 views
0

我正在使用wxHaskell編寫應用程序,我希望能夠檢測按鈕的狀態(不管它是否在任何給定時間被按下)。然而,我在確定如何做到這一點時遇到了一些麻煩。首先,我認爲可能會有一個「按鈕被按下」的屬性,我可以使用,但似乎沒有。然後,我有想要維持一個IORef,我更新了按鈕和按鈕事件。但是,這將需要Button對象實際上按鈕事件和按鈕事件,這是不會出現的。這是一個Commanding的實例,但我認爲command事件僅在按鈕上觸發,這對於這個想法來說是不夠的。有沒有人有任何其他建議?wxHaskell按鈕狀態

回答

1

解決方法

可以通過檢測觸發這些事件(如鼠標鍵,空格鍵向下)的低級別的操作自己實現。

在WX您可以使用下面的功能和構造:

mouse :: Reactive w => Event w (EventMouse -> IO()) 
data EventMouse = ... | MouseLeftDown !Point !Modifiers 

而且,正如你建議,你可以保持自己的狀態,在IORef。我的懷疑是,這裏的左邊的按鈕意味着主要按鈕(右手爲左手用戶)。

UI設計原則

第二個問題,你還沒問由我來回答,是,這是否是好的UI設計。

一個按鈕的行爲(使用鼠標假設相互作用)是,當用戶在按鈕區域釋放鼠標按鍵後向下按壓在同一區域中的鼠標按鈕點擊事件報告。如果用戶移開並釋放,或按下「Escape」,則不會發生點擊。

對正在按下的按鈕(未點擊)採取任何操作會讓用戶感到不自然。

在實際應用中,使用這將是,恕我直言,所採取的措施,其效果可以只有釋放後見證和唯一可以接受的辦法是立即撤消如果點擊取消(即鼠標左鍵釋放按鈕區域外)。

編輯:請同時考慮到具有輔助功能要求的用戶可能會啓用操作系統設置,以影響報告按鈕點擊的方式和時間(但不是向下/向上鼠標事件)。

0

無法知道wxButton是否被按下,因爲它是有意隱藏此實現細節的按鈕的抽象。如果您需要知道按鈕狀態,請改爲使用wxToggleButton