Используя wxSmith, у меня есть диалоговое окно со многими кнопками, для которых требуются одни и те же обработчики событий, но, конечно, они действуют на свои собственные экземпляры данных.
Раньше, используя конструктор C++, я бы поместил строку идентификатора в поле тега виджета. Затем у меня была бы функция для итерации всех виджетов и использования строки в качестве конструктора для создания пользовательского объекта и размещения указателя на него в поле тега.
Таким образом, общий обработчик событий может просто преобразовать поле тега, чтобы получить пользовательский конкретный экземпляр, который знает, что делать с событием.
Другие GUI API, такие как Visual Basic, были более простыми, но допускали массив элементов управления или индекс, а события вызывались со ссылкой на индекс, поэтому такие вещи все еще можно было выполнять с массивами.
Пока что единственный способ, которым я могу связать дополнительную информацию с wxWidget, — это унаследовать ее в свой собственный настраиваемый элемент управления, но я боюсь, что это нарушит совместимость с wxSmith.
Кто-нибудь знает элегантный способ сделать это?





Как вы сказали, простой способ справиться с этим - использовать общий обработчик событий. Просто подключите (привяжите) все события кнопок к одной и той же функции (методу) вашего диалога:
Bind(wxEVT_BUTTON, TheDialog::OnButtonClicked, this);
В соответствующем обработчике событий вы сможете получить соответствующую кнопку, используя событие.GetEventObject(), или ее идентификатор, если вы знаете его, используя событие.GetId().
С уважением Хав'
Хорошо, я наконец-то наткнулся на этот похожий вопрос: stackoverflow.com/questions/14075666/wxwidgets-event-arguments