イベントハンドラで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