簡體   English   中英

在 wxFrame 上處理來自 wxTextCtrl 的事件 - C++/wxWidgets

[英]Handling events from wxTextCtrl on wxFrame - C++/wxWidgets

我有一個派生自wxFrameMyFrame 一個wxTextCtrl被添加到這個框架中。 我可以在框架中處理此文本控件的EVT_KEY_DOWN嗎? 就像是,

BEGIN_EVENT_TABLE(wxTextCtrl, wxControl)
    EVT_KEY_DOWN(MyFrame::OnKeyDown)
END_EVENT_TABLE()

上面的代碼似乎不起作用。 文檔說這樣的事件只能由事件起源的 object 處理。 那么我應該wxTextCtrl來處理這個問題並以某種方式將信息發送到框架嗎?

這樣做的最佳方法是什么?

來自子控件的wxCommandEventwxNotifyEvent類型事件被設置為自動向上傳播到父框架。 但是, wxKeyEvent是從wxEvent派生的,因此它不會傳播到父框架。 好吧,您可以使用動態事件處理程序將一些事件路由到任何wxEvtHandler派生對象。

在 wxWidgets 2.8 下,您應該使用wxEvtHandler::Connect 此處描述了此方法。 您還可以查看此示例代碼

在 wxWidgets 2.9 和 SVN 下,您應該使用wxEvtHandler::Bind<>

MyFrame::MyFrame(...)
{
    m_textcontrol->Bind(wxEVT_KEY_DOWN, &MyFrame::OnTextControlKeyDown, this);
}

wxEvtHandler::Bind<>方法 在此處描述。

是的,子類 wxtextCtrl 來處理父框架中的按鍵。

class cSpecialTextCtrl : public wxTextCtrl
{
public:
  cSpecialTextCtrl( ... ) : wxTextCtrl( ... ) {}
  void OnKeyDown( wxKeyEvent& ev );
private:
  DECLARE_EVENT_TABLE()
};

而且當然

BEGIN_EVENT_TABLE( cSpecialTextCtrl , wxTextCtrl)
    EVT_KEY_DOWN( cSpecialTextCtrl ::OnKeyDown)
END_EVENT_TABLE()

在方法中,將事件傳遞給您的 MyFrame

void cSpecialTextCtrl::OnKeyDown( wxKeyEvent& ev )
{
  ((MyFrame*)GetParent())->OnKeyDown( ev );
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM