我正在使用wxHaskell编写一个应用程序,我希望能够检测按钮的状态(无论它是否在任何给定时间被按下)。不过,我在弄清楚该怎么做时遇到了一些麻烦。首先,我认为可能有一个“按钮按下”属性,我可以使用,但似乎没有。然后,我想要维护一个IORef,我更新了按钮和按钮的事件。但是,这将要求Button对象实际具有按钮和向下按钮的事件,而这似乎不是。这是Commanding的一个实例,但我假设command事件只在按钮上触发,这还不够。还有人有其他建议吗?
发布于 2016-04-24 05:12:52
解决方案
您可以通过检测触发这些事件的低级操作来实现这一点(例如。鼠标按钮向下,空格键向下。
在WX中,您可以使用以下函数和构造函数:
mouse :: Reactive w => Event w (EventMouse -> IO ())
data EventMouse = ... | MouseLeftDown !Point !Modifiers而且,正如你所建议的那样,你可以将自己的状态保持在一个IORef中。我怀疑这里的左键意味着主按钮(对左撇子用户来说是右)。
UI设计原则
第二个问题,你还没有被我回答,是这是否是好的UI设计。
按钮的行为(假设使用鼠标进行交互)是当用户在按下同一区域的鼠标按钮后释放按钮区域()中的鼠标按钮时报告的。如果用户移动和释放,或按下‘逃逸’,就没有点击。
对被按下的按钮采取任何行动(而不是点击)对用户来说都是不自然的。
在实践中,使用该方法的唯一可接受的方法是,imho采取一个操作,其效果只能在释放后见证,如果取消单击,则立即将撤消(即。鼠标按钮释放外按钮区域)。
编辑:还请考虑到,具有可访问性要求的用户可能启用了操作系统设置,这些设置会影响报告按钮单击的方式和时间(但不包括向下/向上鼠标事件)。
发布于 2016-04-24 14:50:02
无法知道wxButton是否被按下,因为它是一个按钮的抽象,它故意隐藏了这个实现细节。如果您需要知道按钮状态,请使用wxToggleButton。
https://stackoverflow.com/questions/36818471
复制相似问题