2012-03-01 6 views
0

私は多くのタブを持つコントロールシステムを持っています。それぞれには多くのボタンとテキストコントロールがあります。私は同じコードを実行する1つのイベントハンドラを別のテキストコントロールに持っていたいと思います。WxWidgetsたくさんのボタン/コントロール用の同じハンドラ

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

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

¿私はそれをどのように行うことができますか? ¿イベントハンドラ内で呼び出し元オブジェクトポインタをリカバリすることは可能ですか?

答えて

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

をたくさん持っていると仮定していただきありがとうございますが、どのように私はIDを使用して、それぞれを区別することができますか?私はスイッチ/ケースをする必要がありますか? getobject(ID)が存在すれば、それは素晴らしいでしょう! – DarkZeros

+0

これを行う通常の方法はswitch文です。必要に応じてgetobject()メソッドを追加できますが、OnCheckIP内からのみ使用される場合は必要ありません。 – ravenspoint

関連する問題