1

私はたくさんのタブを備えた制御システムを持っています。それぞれに多くのボタンとテキストコントロールがあります。同じコードを異なるテキストコントロールに対して実行する単一のイベントハンドラーが必要です。

たとえば、10個のテキストコントロールにはIP値があります。10個のイベントと10個のハンドラーの代わりに、同じイベントハンドラー関数を使用したいのですが、それぞれのイベント生成オブジェクトを指す必要があります。

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

どうやってやるの?¿イベントハンドラー内で呼び出し元オブジェクトポインターを回復することも可能ですか?

4

1 に答える 1

2

使用しているコントロールをサブクラス化し、生成されたイベントをキャッチし、新しいクラスでイベントを処理するメソッドを呼び出すことができます。次に、同じハンドラーを必要とするすべてのウィジェットに対して、この新しいコントロールを使用します。

たくさんの 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
    }
};
于 2012-03-01T15:53:23.513 に答える