【问题标题】:Can´t Connect Focus Events in wxWIdgets 3.0 C++无法在 wxWIdgets 3.0 C++ 中连接焦点事件
【发布时间】:2016-04-03 13:43:20
【问题描述】:

我有一个 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 );

还有一个事件表:

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()

在事件表示例中,我确保在头文件中声明它。 但这些都不起作用。 我的操作系统是 Ubuntu 14.04 如果您需要更多信息,请告诉我。

【问题讨论】:

    标签: c++ ubuntu events focus wxwidgets


    【解决方案1】:

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

    但是在您更改此设置之前,我认为有一个更简单更好的解决方案:只需使用 SetHint() 并且完全不用自己实现对文本输入提示的支持。

    【讨论】:

    • 谢谢!有用。但我仍然不明白,我需要知道如何将 wxtextctrl(或另一个孩子)与焦点事件函数连接起来,因为我现在需要它用于另一个目的。我该怎么做?
    • 最简单的方法是使用Bind(),但你需要在文本控件对象本身上调用它,即text->Bind(wxEVT_SET_FOCUS, &MyDialog::OnTextFocus, dialog)
    猜你喜欢
    • 2013-09-17
    • 2014-02-24
    • 2011-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-08
    • 2012-04-22
    相关资源
    最近更新 更多