乾淨的解決方案將實現自己的LittlePanel
控制:
public class LittlePanel : Panel
{
public class HoverEventArgs
{
public bool Active { get; set; }
public HoverEventArgs(bool active)
{
Active = active;
}
}
public event EventHandler<HoverEventArgs> Hover;
protected override void OnMouseEnter(EventArgs e)
{
base.OnMouseEnter(e);
OnHover(true);
}
protected override void OnMouseLeave(EventArgs e)
{
base.OnMouseLeave(e);
OnHover(false);
}
protected void OnHover(bool active)
{
EventHandler<HoverEventArgs> hover = Hover;
if (hover != null) hover(this, new HoverEventArgs(active));
}
}
然後訂閱所有提出的Hover
事件LittlePanels
內的「大」Panel
:
foreach (Control control in bigPanel.Controls)
{
if (control is LittlePanel)
{
((LittlePanel)control).Hover += littlePanel_Hover;
}
}
使用一個共享的事件處理程序:
void littlePanel_Hover(object sender, LittlePanel.HoverEventArgs e)
{
// Your code goes here...
}
您也可以考慮添加共享功能的LittlePanel
控制,如包含標籤,等。
您可以嘗試爲所有面板分配相同的事件處理函數,並且將發送方'(object sender,EventArgs e)'轉換爲確定哪個面板觸發事件 –
確實,當鼠標懸停在某個面板上時,大面板不會觸發小一個。該表單也不會收到鼠標事件。 - 當您動態創建它們時,創建(one!)事件以及面板,正如我希望的那樣! – TaW