WxWidgets один и тот же обработчик для множества кнопок / элементов управления - PullRequest
0 голосов
/ 01 марта 2012

У меня есть система управления с множеством вкладок. У каждого из них много кнопок и текстовых элементов управления. Я хотел бы иметь один обработчик событий, который выполняет тот же код, но для разных текстовых элементов управления.

Например, 10 текстовых элементов управления имеют значения IP. Вместо 10 событий и 10 обработчиков, я хочу использовать одну и ту же функцию обработчика событий, но они должны указывать на объект генерации каждого из них:

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

¿Как я могу это сделать? Even Возможно ли даже восстановить указатель объекта вызывающей стороны внутри обработчика события?

1 Ответ

1 голос
/ 01 марта 2012

Вы можете создать подкласс используемого элемента управления, перехватить сгенерированное событие и вызвать метод для обработки события в новом классе.Затем вы используете этот новый элемент управления для всех виджетов, которым требуется один и тот же обработчик.

Предположим, у вас много 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
    }
};
...