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

WxWidgets对许多按钮/控件使用相同的处理程序,wxwidgets,handlers,Wxwidgets,Handlers,我有一个有很多标签的控制系统。它们每个都有许多按钮和文本控件。我希望有一个单独的事件处理程序,它执行相同的代码,但执行不同的文本控件 例如,10个文本控件具有IP值。我希望使用相同的事件处理函数,而不是10个事件和10个处理程序,但它们需要指向每个事件的事件生成对象: void anyname::OnCheckIP(wxCommandEvent& event) { // code to check IP value for the caller text control } 我怎

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

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

void anyname::OnCheckIP(wxCommandEvent& event)
{
   // code to check IP value for the caller text control
}
我怎么能做到?
甚至可以恢复事件处理程序中的调用方对象指针吗?

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

假设你有很多WxtCtrl

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
    }
};

谢谢,但是我如何使用ID来区分每个人呢?我需要做一个开关/箱子吗?如果有一个getobject(ID),那就太好了!switch语句是执行此操作的常用方法。如果愿意,可以添加getobject()方法,但如果只在OnCheckIP中使用,则不必添加。