2015-10-21 54 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

我无法确定问题。但代码现在正在工作。 –