私はカスタムボタン(Winformsコントロールライブラリ)を作成しており、すべてのmouseenterがボタンのすべてのコントロールに追加されるように、以下のコードを用意しています。私はそれを実行すると、スタックオーバーフローの例外が発生します。 MouseEnterの代わりにClickと同じコードがあり、正常に動作します。ここでは、コードは次のようになります。ここイベントプロパティコードがスタックオーバーフロー例外を引き起こすのはなぜですか?
public new event EventHandler MouseEnter {
add
{
this.MouseEnter += value;
foreach (Control i in Controls)
{
i.MouseEnter += value;
}
}
remove
{
this.MouseEnter -= value;
foreach (Control i in Controls)
{
i.MouseEnter -= value;
}
}
}
は、クリックのコードは次のとおりです。
public new event EventHandler Click {
add {
this.Click += value;
foreach (Control i in Controls) {
i.Click += value;
}
}
remove {
this.Click -= value;
foreach (Control i in Controls) {
i.Click -= value;
}
}
}
これは、あなたが 'Click'の基本バージョンを上げた場合にのみ動作します。あなたのバージョンの 'Click'は、ハンドラのサブスクリプションをコントロールの子に伝播するための*ヘルパーメソッドになっています。** **イベントアダーの後ろにこのロジックを隠さないでください。 。** – dlev