加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-15 21:12:35 所属栏目:百科 来源:网络整理
导读:我有一个带有子控件的表单. 我想当用户将鼠标移到表单上时,表单将被关闭. 所以我抓住鼠标进入并在表格上离开.但是如果我在窗体中的任何控件上移动鼠标,鼠标离开事件也会被捕获. 请帮我解决这个问题.谢谢. 更新: 当光标的位置在表单的标题区域上时(该区域称
我有一个带有子控件的表单.
我想当用户将鼠标移到表单上时,表单将被关闭.
所以我抓住鼠标进入并在表格上离开.但是如果我在窗体中的任何控件上移动鼠标,鼠标离开事件也会被捕获.

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

更新:
当光标的位置在表单的标题区域上时(该区域称为非客户区域).我将鼠标移出此区域,我无法收到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语句转换为扩展方法,这有助于更进一步的使用.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读