Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ Can´;t连接wxWIdgets 3.0c++;_C++_Ubuntu_Events_Focus_Wxwidgets - Fatal编程技术网

C++ Can´;t连接wxWIdgets 3.0c++;

C++ Can´;t连接wxWIdgets 3.0c++;,c++,ubuntu,events,focus,wxwidgets,C++,Ubuntu,Events,Focus,Wxwidgets,我有一个wxDialog,里面有一些wxtxtCtrl。 我需要在这些WXTEXTCRL获得和失去焦点时连接事件。具体来说,每个WXTEXTCRL都有一个默认文本。当用户触摸它进行写入时,默认文本将消失,并允许用户从头开始写入。此部分用于wxEVT_设置_焦点 然后,如果用户不写东西并离开WXTEXTCRL,我将再次设置默认文本。这部分是为wxEVT_KILL_FOCUS准备的。 但是,我无法将textctrl与事件连接起来。我已经试过了: Connect( wxTXTCRLID , wxEVT

我有一个wxDialog,里面有一些wxtxtCtrl。 我需要在这些WXTEXTCRL获得和失去焦点时连接事件。具体来说,每个WXTEXTCRL都有一个默认文本。当用户触摸它进行写入时,默认文本将消失,并允许用户从头开始写入。此部分用于wxEVT_设置_焦点

然后,如果用户不写东西并离开WXTEXTCRL,我将再次设置默认文本。这部分是为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
如果您需要更多信息,请告诉我。

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


但是,在您更改此选项之前,我认为有一个更简单、更好的解决方案:只需使用,而不必自己实现对文本输入提示的支持。

谢谢!它起作用了。但我仍然不理解,我需要知道如何将WXTEXTCRL(或另一个子项)与焦点事件函数连接起来,因为我现在需要它用于其他目的。我该怎么做?最简单的方法是使用
Bind()
,但需要在文本控件对象本身上调用它,即
text->Bind(wxEVT\u SET\u FOCUS,&MyDialog::OnTextFocus,dialog)