我有一个带有子控件的表单.
我想当用户将鼠标移到表单上时,表单将被关闭.
所以我抓住鼠标进入并在表格上离开.但是如果我在窗体中的任何控件上移动鼠标,鼠标离开事件也会被捕获.
我想当用户将鼠标移到表单上时,表单将被关闭.
所以我抓住鼠标进入并在表格上离开.但是如果我在窗体中的任何控件上移动鼠标,鼠标离开事件也会被捕获.
请帮我解决这个问题.谢谢.
更新:
当光标的位置在表单的标题区域上时(该区域称为非客户区域).我将鼠标移出此区域,我无法收到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] 举报,一经查实,本站将立刻删除。