2015-10-21 78 views
0

我假裝「抓取」並處理事件:來自wxTextCtrl的EVT_TEXT和來自wxID_APPLY的EVT_BUTTON。使用事件表格自定義對話框事件處理

我試着用事件表來處理事件,我不能?爲什麼?

的源代碼:

#include <wx/wxprec.h> 
#ifndef WX_PRECOMP 
    #include <wx/wx.h> 
#endif 

class Dialog : public wxDialog 
{ 
    public: 
     Dialog(wxWindow *parent, const wxString &title); 

    private: 
     void OnNameChange(wxCommandEvent &event); 
     void OnApply(wxCommandEvent &event); 

     wxDECLARE_EVENT_TABLE(); 

     wxTextCtrl *m_name; 
}; 

enum 
{ 
    ID_NAME = 1 
}; 

Dialog::Dialog(wxWindow *parent, const wxString &title) : 
    wxDialog(parent, wxID_ANY, title, wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER) 
{ 
    wxBoxSizer *vbox = new wxBoxSizer(wxVERTICAL); 
    SetSizer(vbox); 

    wxFlexGridSizer *flexGrid = new wxFlexGridSizer(2, 2, 5, 5); 

    wxStaticText *label = new wxStaticText(this, wxID_ANY, "&Name:"); 
    flexGrid->Add(label); 

    m_name = new wxTextCtrl(this, ID_NAME, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxTE_PROCESS_ENTER); 
    flexGrid->Add(m_name, 1, wxEXPAND); 

    label = new wxStaticText(this, wxID_ANY, "&Description:"); 
    flexGrid->Add(label); 

    m_description = new wxTextCtrl(this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxTE_MULTILINE); 
    flexGrid->Add(m_description, 1, wxEXPAND); 

    flexGrid->AddGrowableRow(1, 1); 
    flexGrid->AddGrowableCol(1, 1); 

    vbox->Add(flexGrid, 1, wxALL | wxEXPAND, 15); 

    vbox->Add(CreateSeparatedButtonSizer(wxAPPLY | wxCANCEL), 0, wxEXPAND | wxALL, 5); 
} 

void Dialog::OnNameChange(wxCommandEvent &event) 
{ 
    m_description->AppendText("Hello\n"); 
} 

void Dialog::OnApply(wxCommandEvent &event) 
{ 
    m_description->AppendText("Apply\n"); 
} 

wxBEGIN_EVENT_TABLE(Dialog, wxDialog) 
    EVT_TEXT(ID_NAME, Dialog::OnNameChange) 
    EVT_BUTTON(wxID_APPLY, Dialog::OnApply) 
wxEND_EVENT_TABLE() 

這是唯一能夠動態處理事件?

Bind(wxEVT_TEXT, &Dialog::OnNameChange, this, m_name->GetId()); 
+0

我的猜測是,你的ID_NAME = 1無效。改用'ID_NAME = wxID_HIGHEST + 1'。 – plaintext

回答

0

所示的代碼絕對應該有效。它不是獨立的,所以我無法測試它,但必須有其他東西沒有顯示在這裏阻止它的工作。如果您仍然無法自行隔離問題,請嘗試製作SSCCE

+0

我無法確定問題。但代碼現在正在工作。 –