универсальные обработчики событий wxWidgets - PullRequest
0 голосов
/ 05 апреля 2019

Использование wxSmith У меня есть диалоговое окно со многими кнопками, для которых требуются одинаковые обработчики событий, но, конечно, они работают с собственным экземпляром данных.

В свое время, используя конструктор C ++, я бы поместил строку идентификаторав поле тега виджета.Тогда у меня была бы функция для итерации всех виджетов и использования строки в качестве конструктора для создания пользовательского объекта и размещения указателя на него в поле тега.

Таким образом, общий обработчик событий мог бы просто привестиполе тега, чтобы получить пользовательский экземпляр, который знает, что делать с событием.

Другие API GUI, такие как Visual Basic, были более простыми, но допускали массив элементов управления или индекс, и события вызывались сссылка на индекс, так что подобные вещи по-прежнему можно было выполнять с массивами.

Пока что единственный способ, с помощью которого я могу увидеть связь дополнительной информации с wxWidget, - встроить ее в свой собственный настраиваемый элемент управления, но я боюсьэто нарушит совместимость с wxSmith.

Кто-нибудь знает элегантный способ сделать это?

1 Ответ

4 голосов
/ 05 апреля 2019

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

Bind(wxEVT_BUTTON, TheDialog::OnButtonClicked, this);

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

С уважением, Xav '

...