wxWidgets 通用事件处理器

wxWidgets generic event handlers

使用 wxSmith 我有一个包含许多按钮的对话框,这些按钮需要相同的事件处理程序,但当然会作用于它们自己的数据实例。

在使用 C++ 构建器的那一天,我会在小部件的标签字段中放置一个标识符字符串。然后我将有一个函数来迭代所有小部件并使用字符串作为构造函数来创建自定义对象并将指向该对象的指针放在标记字段中。

这样一来,通用事件处理程序就可以简单地转换标记字段来获取知道如何处理事件的自定义特定实例。

其他 GUI API,例如 visual basic,更简单,但允许控件数组或索引,并且事件是通过引用索引来调用的,所以这类事情仍然存在可以使用数组。

到目前为止,我能看到将附加信息与 wxWidget 相关联的唯一方法是将其继承到我自己的自定义控件中,但我担心这会破坏与 wxSmith 的兼容性。

有人知道一个优雅的方法吗?

如您所说,处理此问题的一种简单方法是使用通用事件处理程序。 只需将所有按钮事件连接(绑定)到对话框的相同功能(方法)即可:

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

在相应的事件处理程序中,您将能够使用 event.GetEventObject() 检索相关按钮,如果您知道它的 ID,则可以使用 event.GetId().

问候 Xav'