微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

c# – 鼠标输入和鼠标在表单上保留

我有一个带有子控件的表单.
我想当用户将鼠标移到表单上时,表单将被关闭.
所以我抓住鼠标进入并在表格上离开.但是如果我在窗体中的任何控件上移动鼠标,鼠标离开事件也会被捕获.

请帮我解决这个问题.谢谢.

更新:
当光标的位置在表单的标题区域上时(该区域称为非客户区域).我将鼠标移出此区域,我无法收到WM_MOUSELEAVE消息以及WM_NCMOUSELEAVE.请帮我解决这个问题.我希望在将鼠标移出此区域时收到消息.谢谢.

解决方法

基本上你想检查光标是否在控件的范围内.这是解决方案:

(1)以与表格大小相同的形式添加面板,并将表格中的所有控件移至面板.它很容易改变:打开MyForm.designer.cs,添加面板,并更改所有语句,如this.Controls.Add(myLabel); to this.myPanel.Controls.Add(myLabel);.

(2)处理您添加的面板的MouseEnter和MouseLeave事件.

myPanel.MouseEnter += (sender,e) =>
{
    //enter
};

myPanel.MouseLeave += (sender,e) =>
{
   if (Cursor.Position.X < myPanel.Location.X 
       || Cursor.Position.Y < myPanel.Location.Y
       || Cursor.Position.X > myPanel.Location.X + myPanel.Width 
       || Cursor.Position.Y > myPanel.Location.Y + myPanel.Height)
   {
       //out of scope
   }
};

(3)为什么不在步骤2中使用Form?为什么我们需要一个相同尺寸的面板?亲自尝试一下.形式的狭窄边界会让你发疯.

(4)您可以将步骤2中的if语句转换为扩展方法,这有助于更进一步的使用.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐