判断鼠标是否在接收键盘事件的控件上

1、在开发过程中,常常会处理键盘事件,键盘事件的获得对象是当前获得焦点的控件,但这时鼠标的光标不一定在控件上。

那么怎样才能判断鼠标是否在这上面呢,同时不在上面怎么移动回来。我们的鼠标移动得到的位置,是控件的上的位置,

我们把鼠标转成屏幕位置,然后在键盘事件中把屏幕位置转成控件位置,这样就能判断鼠标是否在控件的上了,如果不在

移动鼠标的光标回到控件上。就完成了。

2、下面是要在工程中记录鼠标屏幕坐标的位置的 X,Y为ScreenX,ScreenY。

3、在鼠标的移动事件中,把控件坐标转成屏幕坐标。

Point MousePoint = e.GetPosition(this); //控件对象坐标
Point p = this.PointToScreen(MousePoint);//把坐标转成屏幕坐标
ScreenX=p.X;
ScreenY=p.Y;

4、在键盘事件时,把屏幕坐标转成控件坐标

Point po=this.PointFromScreen(new Point(ScreenXScreenY));//屏幕坐标转成控件坐标           
if ((po.Y > this.ActualHeight || po.Y <= 0) || (po.X <= 0 || po.X > this.ActualWidth - self_Value.picFiveWidth))
 { //不在当前控件上                    
    Point pt = new Point(Math.Ceiling((this.ActualWidth - self_Value.picFiveWidth) / 2), Math.Ceiling(this.ActualHeight / 2));
    Point ps = this.PointToScreen(pt);
    SetCursorPos((int)ps.X,(int)ps.Y);
 }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值