これは現在かなり繰り返されています。これに対処するためのより DRY な方法を探していますが、私が見つけた各ソリューションは実際にはそれほど優れていません。問題は、イベントを親の SearchResultItem に作用させたい場合です。たとえば、ラベルが親コントロールの一番端にある場合、親コントロールは、その子ラベル内で発生した場合、マウスが離れたり入ったりするのを認識しません。だから私もそれぞれの子へのメソッドです。ただし、子供が追加された場合は、イベントごとに覚えて追加する必要があります。ダブルクリックとクリックのイベントもあります。これを行うより良い方法を知っていますか?
これが私のコードで、関連するものだけを示すために簡略化されています:
public partial class SearchResultItem : UserControl
{
public SearchResultItem()
{
SetupForm();
}
private void SetupForm()
{
//Setup the back color change on mouse enter
SetupMouseEnter();
//Setup the original back color when mouse leave
SetupMouseLeave();
}
private void SetupMouseLeave()
{
this.MouseLeave += SearchResultItem_MouseLeave;
this.lblRight.MouseLeave += SearchResultItem_MouseLeave;
this.lblBottom.MouseLeave += SearchResultItem_MouseLeave;
this.lblColor.MouseLeave += SearchResultItem_MouseLeave;
this.lblTop.MouseLeave += SearchResultItem_MouseLeave;
this.picture.MouseLeave += SearchResultItem_MouseLeave;
}
void SearchResultItem_MouseLeave(object sender, EventArgs e)
{
this.BackColor = Color.FromKnownColor(KnownColor.Control);
}
private void SetupMouseEnter()
{
this.MouseEnter += SearchResultItem_MouseEnter;
this.lblRight.MouseEnter += SearchResultItem_MouseEnter;
this.lblBottom.MouseEnter += SearchResultItem_MouseEnter;
this.lblColor.MouseEnter += SearchResultItem_MouseEnter;
this.lblTop.MouseEnter += SearchResultItem_MouseEnter;
this.picture.MouseEnter += SearchResultItem_MouseEnter;
}
void SearchResultItem_MouseEnter(object sender, EventArgs e)
{
this.BackColor = Color.BlanchedAlmond;
}
}