簡體   English   中英

wxHaskell按鈕狀態

[英]wxHaskell Button State

我正在使用wxHaskell編寫應用程序,並且希望能夠檢測按鈕的狀態(是否在任何給定時間都按下了按鈕)。 但是,我在弄清楚如何執行此操作時遇到了一些麻煩。 首先,我以為可以使用“按下按鈕”屬性,但似乎沒有。 然后,我有了一個IORef的想法,我可以在按下按鈕和按下按鈕事件時進行更新。 但是,這將要求Button對象實際上具有按下按鈕和按下按鈕的事件,但似乎沒有。 它是Commanding一個實例,但我假設僅在按鈕按下時才觸發command事件,對於這個想法來說還不夠。 還有其他建議嗎?

解決方法

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

在WX中,您可以使用以下函數和構造函數:

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

而且,正如您所建議的,您可以將狀態自己保留在IORef 我懷疑這里的左鍵表示按鈕(對於慣用左手的用戶來說,右鍵)。

UI設計原則

我沒有回答的第二個問題是這是否是好的UI設計。

按鈕的行為(假設使用鼠標進行交互)是當用戶在同一區域中按下鼠標按鈕 在按鈕區域中釋放鼠標按鈕時,報告單擊事件 如果用戶離開並釋放或按下“ Escape”,則不會單擊。

對按下(未單擊)的按鈕執行任何操作對於用戶來說都是不自然的。

實際上,使用此方法的唯一可接受的方法是恕我直言,采取一種在釋放后才能看到效果的動作,如果取消單擊(即在按鈕區域之外釋放鼠標按鈕),則該動作將立即撤消

編輯 :還請考慮到具有可訪問性要求的用戶可能已啟用操作系統設置,這些設置會影響報告按鈕單擊的方式和時間(但不會影響鼠標的向下/向上)。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM