WinForm 鼠标进入移开窗体事件,因子控件导致的误触发

时间:2021-08-30 18:10:26
 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移开事件的问题就解决了。