我有一个带有很多标签的控制系统。每个都有许多按钮和文本控件。我想有一个单独的事件处理程序,它执行相同的代码,但不同的文本控件。
例如,10个文本控件具有IP值。我想使用相同的事件处理函数,而不是10个事件和10个处理程序,但是它们需要指向每个事件生成对象:
void anyname::OnCheckIP(wxCommandEvent& event)
{
// code to check IP value for the caller text control
}
¿我该怎么做? ¿甚至可以恢复事件处理程序中的调用者对象指针吗?
答案 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
}
};