处理来自 wxFrame 上的 wxTextCtrl 的事件 - C++/wxWidgets
我有一个从 wxFrame
派生的 MyFrame
。 wxTextCtrl
被添加到该框架中。我可以在框架中处理此文本控件的 EVT_KEY_DOWN
吗?比如,
BEGIN_EVENT_TABLE(wxTextCtrl, wxControl)
EVT_KEY_DOWN(MyFrame::OnKeyDown)
END_EVENT_TABLE()
上面的代码似乎不起作用。文档说这样的事件只能由事件发起的对象处理。那么我应该子类化 wxTextCtrl 来处理这个问题并以某种方式将信息发送到框架吗?
这样做的最佳方法是什么?
I have a MyFrame
which derives from wxFrame
. A wxTextCtrl
is added to this frame. Can I handle EVT_KEY_DOWN
of this text control in frame? Something like,
BEGIN_EVENT_TABLE(wxTextCtrl, wxControl)
EVT_KEY_DOWN(MyFrame::OnKeyDown)
END_EVENT_TABLE()
The above code seems to be not working. Documentation says events like this can only be handled by the object where the event is originated. So should I subclass wxTextCtrl
to handle this and somehow send the information to frame?
What is the best way of doing this?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
来自子控件的
wxCommandEvent
和wxNotifyEvent
类型事件被设置为自动向上传播到父框架。但是,wxKeyEvent
是从wxEvent
派生的,因此它不会传播到父框架。那么,您可以使用动态事件处理程序将某些事件路由到任何wxEvtHandler
派生对象。在wxWidgets 2.8下你应该使用
wxEvtHandler::Connect
。此方法在此处进行了描述。您还可以查看此示例代码。在 wxWidgets 2.9 和 SVN 下,您应该使用
wxEvtHandler::Bind<>
:wxEvtHandler::Bind<>
方法描述为 此处。The
wxCommandEvent
andwxNotifyEvent
type events from a child controls are set to propagate upward to the parent frame automatically. However, thewxKeyEvent
is derived from thewxEvent
so it is not propagating to the parent frame. Well, you may use dynamic event handlers to route some of the events to any ofwxEvtHandler
derived objects.Under wxWidgets 2.8 you should use
wxEvtHandler::Connect
. This method is described here. You may also look at this sample code.Under wxWidgets 2.9 and SVN you should use
wxEvtHandler::Bind<>
:The
wxEvtHandler::Bind<>
method is described here.是的,子类化 wxtextCtrl 来处理父框架中的按键操作。
当然,
在该方法中,将事件传递给您的 MyFrame
Yes, subclass wxtextCtrl to handle the key presses in the parent frame.
and of course
In the method, pass the event to your MyFrame