1 /// <summary> 2 /// 重寫OnControlAdded方法,為每個子控件添加MouseLeave事件 3 /// </summary> 4 /// <param name="e"></param> 5 protected override void OnControlAdded(ControlEventArgs e) 6 { 7 Control control = e.Control; // 獲取添加的子控件 8 control.MouseLeave += this.SubControlLeave; // 當鼠標離開該子控件時判斷是否是離開SelfDefinePanel 9 base.OnControlAdded(e); 10 } 11 12 /// <summary> 13 /// 重寫OnMouseLeave事件,如果是離開本身的矩形區域則發生 base.OnMouseLeave(e); 14 /// </summary> 15 /// <param name="e"></param> 16 protected override void OnMouseLeave(EventArgs e) 17 { 18 //判斷鼠標是否還在本控件的矩形區域內 19 if (!this.RectangleToScreen(this.ClientRectangle).Contains(Control.MousePosition)) // this.RectangleToScreen(this.ClientRectangle) 映射為屏幕的矩形 20 { 21 base.OnMouseLeave(e); 22 } 23 }
復制以上代碼在需要的窗體中即可。這樣,如果鼠標進入到窗體中的子控件,導致也觸發了窗體的Leavel移開事件的問題就解決了。