2016-10-19 14 views
0

イベントを結んでいる関数をどのように呼び出すのですか?関数上で複数のイベントを設定する方法

は、私はこのようなもので関数を呼び出すことができるようにしたい:

statsDialog::statsDialog(..) : wxDialog(..) { 
    updateStats(); 
} 

か、どのように機能する複数のEventHandlerをバインドしますか?たとえば、UPDATE_STATS_BUTTONが押されたときに、wxEVT_SET_FOCUSイベントのupdateStatsを呼び出します。コードを複製せずに(updateStats関数をコピーしてwxFocusEventHandlerに変更するだけで)これを行うにはどうすればよいですか?

BEGIN_EVENT_TABLE(statsDialog, wxDialog) 
EVT_BUTTON(UPDATE_STATS_BUTTON, statsDialog::updateStats) 
END_EVENT_TABLE() 

statsDialog::statsDialog(..) : wxDialog(..) {  
    // layout stuff 
} 

void 
statsDialog::updateStats(wxCommandEvent& event) { 
    // do stuff on dialog focus AND when UPDATE_STATS_BUTTON is pressed 
} 

答えて

0

DoUpdateStats()という名前の関数は、フォーカスイベントハンドラとボタンイベントハンドラの両方から呼び出されます。 Bind()とC++ 11を使用している場合、これは特に簡単です:

Bind(wxEVT_SET_FOCUS, [](wxFocusEvent& e) { e.Skip(); DoUpdateStats(); }); 
btn->Bind(wxEVT_BUTTON, [](wxCommandEvent&) { DoUpdateStats(); }); 
+0

ありがとうございます!動作しますが、コンパイルするために&を括弧内に追加する必要がありました。 –

+0

'DoUpdateStats()'がグローバル関数である場合、デフォルトのキャプチャノードは必要ありませんが、メンバメソッドの場合は ' 'これを捕らえる必要がある。ただし、デフォルトのキャプチャモードを使用するよりも明示的に行うほうがよいでしょう。 –

関連する問題