无法在 wxWIdgets 3.0 C++ 中连接焦点事件

Can´t Connect Focus Events in wxWIdgets 3.0 C++

我有一个wxDialog,里面有一些wxTextCtrl。 当这些 wxTextCtrl 获得和失去焦点时,我需要连接事件。具体来说,每个 wxTextCtrl 都有一个默认的 Text。当用户触摸它进行书写时,默认文本消失,允许用户从头开始书写。这部分是 wxEVT_SET_FOCUS.

然后,如果用户不写东西并离开wxTextCtrl,我会再次设置默认文本。这部分是给 wxEVT_KILL_FOCUS 的。 但是,我无法将 textctrl 与事件连接起来。我已经试过了:

Connect( wxTXTCRLID , wxEVT_SET_FOCUS , wxFocusEventHandler(MyDialog::OnFocus) , nullptr , this ); 

这也是:

Bind( wxEVT_SET_FOCUS , &MyDialog::OnFocus , this , wxTXTCRLID );

也有事件table:

BEGIN_EVENT_TABLE( MyDialog , wxDialog )
      EVT_SET_FOCUS( MyDialog::OnFocus )
END_EVENT_TABLE()

还有这个:

BEGIN_EVENT_TABLE( MyDialog , wxDialog )
      EVT_COMMAND_SET_FOCUS( wxTXTCRLID , MyDialog::OnFocus )
END_EVENT_TABLE()

在事件 table 示例中,我确保在头文件中声明它。 但是其中 none 有效。 我的 OS 是 Ubuntu 14.04 如果您需要更多信息,请告诉我。

wxFocusEvent 不是 wxCommandEvent,因此默认情况下它不会传播到父级,您永远不会在对话框中为子级 window 获取它。您必须在子控件上调用 Bind() 而不是对话框本身(并且您不能使用事件表轻松地做到这一点)。

然而,在您更改此设置之前,我认为有一个更简单和更好的解决方案:只需使用 SetHint() 并且根本不用为实现对文本输入提示的支持而烦恼。