C#控件怎么不触发鼠标事件

我设置了Panel控件的鼠标进入和移出事件,然后又在上面放了一个Label作为提示但我为了省事发现怎么处理这个Label都不合适,正常状态下鼠标移到Label上就算移出了... 我设置了Panel控件的鼠标进入和移出事件,然后又在上面放了一个Label作为提示
但我为了省事发现怎么处理这个Label都不合适,正常状态下鼠标移到Label上就算移出了Panel
但是如果我在事件里用sender又会变成Label和Panel都触发却又各走各的
只是想问,有没有在不隐藏控件的情况下,让我鼠标不会触发该控件的事件
展开
 我来答
然后去远足
2014-07-15 · TA获得超过1万个赞
知道大有可为答主
回答量:4016
采纳率:83%
帮助的人:2434万
展开全部

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
这样有什么弊端吗?
阳光的雷咩咩
2014-07-14 · TA获得超过1.4万个赞
知道大有可为答主
回答量:2.3万
采纳率:66%
帮助的人:7829万
展开全部
说得不清楚。可以留联系看。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式