C#控件怎么不触发鼠标事件
我设置了Panel控件的鼠标进入和移出事件,然后又在上面放了一个Label作为提示但我为了省事发现怎么处理这个Label都不合适,正常状态下鼠标移到Label上就算移出了...
我设置了Panel控件的鼠标进入和移出事件,然后又在上面放了一个Label作为提示
但我为了省事发现怎么处理这个Label都不合适,正常状态下鼠标移到Label上就算移出了Panel
但是如果我在事件里用sender又会变成Label和Panel都触发却又各走各的
只是想问,有没有在不隐藏控件的情况下,让我鼠标不会触发该控件的事件 展开
但我为了省事发现怎么处理这个Label都不合适,正常状态下鼠标移到Label上就算移出了Panel
但是如果我在事件里用sender又会变成Label和Panel都触发却又各走各的
只是想问,有没有在不隐藏控件的情况下,让我鼠标不会触发该控件的事件 展开
2个回答
展开全部
Winform 移入容器内的控件就算移出容器了,实际开发中这个问题还真挺烦人的。
原因就是 Winform 所有 Control 的 OnMouseEnter、OnMouseLeave 都是判断 Control.DisplayRectangle 和鼠标当前坐标关系的,DisplayRectangle.Contains(MousePoint) 就说明在控件内,反之不在。但 DisplayRectangle 是有缺陷的,即如果该控件顶端有其他控件遮挡,那么 DisplayRectangle 的计算就不是从窗体左上角开始计算的,而是从控件自己的左上角计算的。
所以解决方法就是多个判断,改成判断 Location 和 Size 来判断鼠标的移入移出,例如:
private void panel1_MouseLeave(object sender, EventArgs e)
{
Point mousePoint = this.PointToClient(Control.MousePosition);
if (mousePoint.X < panel1.Left || mousePoint.X > panel1.Right ||
mousePoint.Y < panel1.Top || mousePoint.Y > panel1.Bottom)
{
MessageBox.Show("移出了Panel1");
}
}
如图:Button1 在 Panel1 内,鼠标移入 Button1 后不触发 if 内部的逻辑。
追问
您是说,当鼠标移动时判断鼠标位置是否在Panel中吗?
我刚刚设置了
if (sender is Label)
((Control)sender).Parent.xxx
else
((Control)sender).xxx
这样有什么弊端吗?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询