wxSpinCtrl不生成事件

时间:2012-02-01 14:10:12

标签: c++ events wxwidgets

我创建了一个名为ValCtrl的类,它扩展了wxPanel。每个实例都管理一个wxCheckBox,一个wxSlider和一个wxSpinCtrl。我动态地将事件绑定到ValCtrl中的方法。

wxSlider和wxCheckBox事件处理正在运行,但我对wxSpinCtrl做错了,我的处理程序没有被调用。该程序编译并运行,我在文档中找不到足够的帮助。有什么想法吗?

以下是我的实例:

linkCheckBox = new wxCheckBox(this, wxID_ANY, stim->name, wxPoint(-1,-1), wxSize(linkCheckBoxSX, defaultS));

slider = new wxSlider(this, wxID_ANY, 0, 0, 100, wxPoint(-1,-1), wxSize(sliderSX, sliderSY), wxSL_HORIZONTAL);
slider->SetRange(stim->minValue, stim->maxValue);
slider->SetValue(stim->value);

spinCtrl = new wxSpinCtrl(this, wxID_ANY, "0", wxPoint(-1,-1), wxSize(spinCtrlSX, spinCtrlSY));
spinCtrl->SetRange(stim->minValue, stim->maxValue);
spinCtrl->SetValue(stim->value);

以下是我的约束力:

slider->Bind(wxEVT_SCROLL_THUMBTRACK, &ValCtrl::OnScroll, this);
slider->Bind(wxEVT_SCROLL_CHANGED, &ValCtrl::OnScroll, this);
spinCtrl->Bind(wxEVT_SPIN, &ValCtrl::OnSpin, this);
spinCtrl->Bind(wxEVT_COMMAND_TEXT_ENTER, &ValCtrl::OnEntered, this);
linkCheckBox->Bind(wxEVT_COMMAND_CHECKBOX_CLICKED, &ValCtrl::OnCheck, this);

以下是我的处理程序方法声明:

void OnCheck(wxCommandEvent& event);
void OnEntered(wxCommandEvent& event);
void OnScroll(wxScrollEvent& event);
void OnSpin(wxSpinEvent& event);

1 个答案:

答案 0 :(得分:3)

读取标题并找到wxEVT_COMMAND_SPINCTRL_UPDATED。我使用2.9显然改变了自2.8以来调度和捕获wxSpinCtrl事件的方式。

现在工作。对于任何其他好奇的一方,更正如下。

spinCtrl->Bind(wxEVT_SPIN, &ValCtrl::OnSpin, this);
spinCtrl->Bind(wxEVT_COMMAND_TEXT_ENTER, &ValCtrl::OnEntered, this);

变成:

spinCtrl->Bind(wxEVT_COMMAND_SPINCTRL_UPDATED, &ValCtrl::OnSpin, this);