C# 获取控件在客户区的坐标,相对于顶级父容器的坐标

/// <summary>
/// 获取控件在客户区的坐标,相对于顶级父容器的坐标
/// </summary>
/// <param name="c">控件</param>
/// <returns>坐标点</returns>
public static Point LocationOnClient(Control c)
{
    var retval = new Point(0, 0);
    for (; c.Parent != null; c = c.Parent)
    {
        retval.Offset(c.Location);
    }
    return retval;
}


1)PointToClient 将指定屏幕点的位置计算成工作区坐标。坐标原点为黄色区域左上角,X轴方向从左到右;Y轴方向从上到下;坐标单位为像素;

2)PointToScreen 将指定工作区点的位置计算成屏幕坐标。坐标原点在屏幕左上角,X轴方向从左到右;Y轴方向从上到下;坐标单位为像素;

Control.PointToClient作用

比如要用鼠标在窗体内一个picturebox上画矩形,怎么把鼠标坐标切换到picturebox中的内部坐标呢,这样:
pictureboxGra.DrawRectangle(Pens.Blue, new Rectangle() { Location = pictureBox1.PointToClient(start), Width = end.X - start.X, Height = end.Y - start.Y });

posted on 2022-07-19 21:38  manber  阅读(594)  评论(0)    收藏  举报

导航