wxWidgets 通用事件处理程序

Rog*_*win 0 events wxwidgets

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

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

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

其他 GUI API,例如 Visual Basic,更简单,但允许控件数组或索引,并且通过引用索引来调用事件,因此此类事情仍然可以使用数组完成。

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

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

小智 5

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

Bind(wxEVT_BUTTON, TheDialog::OnButtonClicked, this);
Run Code Online (Sandbox Code Playgroud)

在相应的事件处理程序中,您将能够使用event.GetEventObject()检索相关按钮,或者使用event.GetId()检索其 Id(如果您知道)。

问候 Xav'