控件在父窗体或屏幕中的绝对坐标

  做了一个控件,这个控件中鼠标移到某个Label上,出现一个panel,然后鼠标从label上移走或是从这个panel上移走该panel就消失。

这中间遇到了两个问题:

1、这个panel位置的问题。

用 this.FindForm().Controls.Add(panel);加该panel。但是Location的时候有问题了,panel.Location=new Point(Label.Location.X,Label.Lcation.Y);结果这个控件的Label位置是(0,0),加的时候就加到了最外层窗体的(0,0)了。于是查到了绝对坐标。换成:

Point p = Label.PointToScreen(this.FindForm().Location);
p.Y += Label.Height;
panel.Location = p;

就可以了。

但是这样还有另一个问题,就是当主窗体还原或者改变大小了,这个panel的位置有不正常了,因此改成:

 Point p = Label.PointToScreen(new Point(0, 0));
p.Y += Label.Height;
Point p1 = this.FindForm().PointToScreen(new Point(0, 0));
p.X -= p1.X;
p.Y -= p1.Y;
 panel.Location = p;

这样主窗体无论位置是不是0,panel的位置就在label的位置上。

2、计算鼠标是否在panel内。

 Rectangle rect = panel.Bounds;
 int x =MousePosition.X - this.FindForm().Left;
 int y = MousePosition.Y - this.FindForm().Top;
 if (x <= rect.Left || x >= rect.Right || y <= rect.Top || y >= rect.Bottom)
 { 
  //鼠标不在panel内     
 }
else
 {
  //鼠标在panel内。
 }


 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值