イベントハンドラでsenderを識別したい
イベントハンドラ内とかでsender
とコントロールを比較するのに、
sender == myButton
みたいなことしたらいけませんよ、っていうお話。
分かってる人なら、「Equals
使えよ、ボケ!」で終わるのですが、
まずは、概要から。
XAMLにx:Name="myButton"
を入れたボタンを定義して、
そのXAMLにでもいんだけど、コードでイベントを設定します。
myButton->Click += ref new RoutedEventHandler( this, &MainPage::Button_Click );
んでもって、イベントハンドラはこんな感じ。
void MainPage::Button_Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e) { OutputDebugString( (static_cast<Button ^>(sender)->Name + L"\n\n")->Data() ); myButton->Content = ( sender->Equals(myButton) ) ? L"同じ!" : L"違う!"; }
これの比較のところを、==
を使ってみたらうまくいかなくて、
ブレイクポイントを設定して確認してもアドレスに相当する値が違うくて、
うまくいかないのは当然なんだけど、どうやって判定しようかと思ってて、
とりあえずメンバー関数(メソッド?)を眺めてたらEquals
があって、
そういうや正確にはこっち使うべきだよなーって思って、使ってみたらうまくいきました。
.NETのときに、同じGroupBox内に配置したRadioButtonのCheckChangedとか、
同じイベントハンドラを割り当てて、==
使って識別してたんだけど、
今後は、Equals
使わないといけないですね、自戒を込めて。
おしまい。
Leave a Comment