2016-04-24 4 views
0

Я пишу приложение с использованием wxHaskell, и я хочу, чтобы было возможность определить состояние кнопки (независимо от того, нажата ли она в любой момент времени). Тем не менее, у меня есть немного проблемы с выяснением, как это сделать. Сначала я подумал, что может быть атрибут «кнопка нажата», который я мог бы использовать, но, похоже, не было. Тогда у меня возникла идея поддерживать IORef, который я обновляю при событиях с кнопками и кнопками. Однако для этого необходимо, чтобы на объекте Buttonесть событий с кнопками и кнопками, которые не отображаются. Это пример Commanding, но я предполагаю, что событие command запускается только на кнопке, что недостаточно для этой идеи. У кого-нибудь есть другие предложения?wxHaskell Button State

ответ

1

Обход

Вы можете осуществить это самостоятельно обнаруживать действия низкого уровня, которые вызывают эти события (например, кнопку мыши вниз, пространство бара вниз).

В WX вы можете использовать следующие функции и конструктор:

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

И, как вы предлагаете, вы можете сохранить состояние самостоятельно в IORef. Мое подозрение в том, что левая кнопка здесь означает основная кнопка (справа для левшей).

принципы проектирования UI

Второй вопрос, который вы не спросили, я отвечу, является ли это хороший дизайн пользовательского интерфейса.

Поведение кнопки (при условии взаимодействия с помощью мыши), что клик сообщается, когда пользователь отпускает кнопку мыши в кнопке областипосле нажатия кнопки мыши в том же районе. Если пользователь удаляется и отпускает или нажимает «Escape», клика нет.

Выполнение любых действий при нажатии кнопки (не нажата) будет неестественным для пользователей.

На практике, единственный приемлемый способ использовать это было бы, имхо, чтобы принять меры, последствия может только быть свидетель после освобождения и который сразу же отменить, если щелчок отменяется (то есть. Кнопка мыши выпущенная за пределами области кнопки).

EDIT: Пожалуйста, учтите, что пользователи, имеющие требования к доступности, могут иметь настройки ОС, которые влияют на то, как и когда указывается щелчок на кнопках (но не вниз/вверх по событиям мыши).

0

Невозможно узнать, нажата ли кнопка wxButton, потому что это абстракция кнопки, которая намеренно скрывает эту деталь реализации. Если вам нужно знать состояние кнопки, используйте вместо этого wxToggleButton.

 Смежные вопросы

  • Нет связанных вопросов^_^