Winform|判断鼠标是否落在某个控件上

在项目中,时常会遇到这样的场景:

某一个控件,比如RichTextBox (命名为:RtxtViewInfo)需要实时刷新计算结果。这意味着它会不停地重新绘制。通常情况下,这也没什么,但是当我们不使用鼠标时,鼠标停在了RtxtViewInfo控件上时,鼠标也会不停地刷新,这样可以看到鼠标一直在闪烁,甚至影像了系统的速度。

问题描述:

鼠标停留在控件上,控件刷新时连同鼠标一起刷新

达到目的:鼠标在控件上时,鼠标不刷新

解决思路:当鼠标处于控件上时,鼠标被控件捕获;当鼠标离开控件时,鼠标未被控件捕获

解决方案:

步骤1:添加 控件的Enter事件(进入控件):鼠标被捕获

步骤2:添加控件的Move事件(移动事件):

判断控件的鼠标位置(MousePosition)是否在控件的工作区域(ClientRectangle)中

如果是:则鼠标依旧被控件捕获 如果为否:则鼠标未被控件捕获

前提条件:鼠标的位置是以【屏幕坐标】表示的,所以 控件的工作区域(ClientRectangle)需要转换到屏幕上去

示例代码如下:

private void RtxtViewInfo_MouseEnter(object sender, EventArgs e)

        {

                RtxtViewInfo.Capture = true;

        }

        private void RtxtViewInfo_MouseMove(object sender, MouseEventArgs e)

        {

            if (RtxtViewInfo.Capture)

            {

                Rectangle rec = RtxtViewInfo.RectangleToScreen(RtxtViewInfo.ClientRectangle);

                if (!rec.Contains(Control.MousePosition))

                {

                    RtxtViewInfo.Capture = false;

                }

            }

        }

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容