WxWidgets用于许多按钮/控件的相同处理程序

时间:2012-03-01 15:19:12

标签: wxwidgets handlers

我有一个带有很多标签的控制系统。每个都有许多按钮和文本控件。我想有一个单独的事件处理程序,它执行相同的代码,但不同的文本控件。

例如,10个文本控件具有IP值。我想使用相同的事件处理函数,而不是10个事件和10个处理程序,但是它们需要指向每个事件生成对象:

void anyname::OnCheckIP(wxCommandEvent& event)
{
   // code to check IP value for the caller text control
}

¿我该怎么做? ¿甚至可以恢复事件处理程序中的调用者对象指针吗?

1 个答案:

答案 0 :(得分:1)

您可以对正在使用的控件进行子类化,捕获生成的事件,并调用方法来处理新类中的事件。然后,对所有需要相同处理程序的小部件使用此新控件。

假设你有很多wxTextCtrls

class cMyCommonTextCtrl : public wxTextCtrl
{
   int myID;
public:
    cMyCommonTextCtrl( int ID, ... )
    : wxTextCtrl( ... ),
    , myID( ID )
    ...
  {
    bind(  wxEVT_TEXT_ENTER, &cMyCommonTextCtrl::OnCheckIP, this, myID );
    ...
  }
    void OnCheckIP( wxCommandEvent& )
    {
        // handle text, using myID attribute to distinguish which one
    }
};