• C#winform控件的各种坐标获取


    一、窗体

    • 绿色边框框住的区域:屏幕
    • 橙色边框框住的区域:窗体
    • 黄色边框框住的区域:窗体工作区

    1.边框 

     窗体的FormBorderStyle可以设置以下的值,每个值导致窗体的边框的宽度不一样,但是可以发现的是左、右、下边框的宽度是一样的:

        //
        // 摘要:
        //     指定窗体的边框样式。
        [ComVisible(true)]
        public enum FormBorderStyle
        {
            //
            // 摘要:
            //     无边框。
            None = 0,
            //
            // 摘要:
            //     固定的单线边框。
            FixedSingle = 1,
            //
            // 摘要:
            //     固定的三维边框。
            Fixed3D = 2,
            //
            // 摘要:
            //     粗、 固定的对话框样式边框。
            FixedDialog = 3,
            //
            // 摘要:
            //     可调整大小的边框。
            Sizable = 4,
            //
            // 摘要:
            //     不是可调整大小工具窗口边框。 在任务栏中或在用户按 ALT + TAB 时出现的窗口中未显示工具窗口。 虽然窗体,用于指定 System.Windows.Forms.FormBorderStyle.FixedToolWindow
            //     通常不显示在任务栏中,您必须确保 System.Windows.Forms.Form.ShowInTaskbar 属性设置为 false, ,因为其默认值是
            //     true。
            FixedToolWindow = 5,
            //
            // 摘要:
            //     可调整大小的工具窗口边界。 在任务栏中或在用户按 ALT + TAB 时出现的窗口中未显示工具窗口。
            SizableToolWindow = 6
        }
    

         可以通过ClientSize获取工作区的大小,即窗体除边框外的大小

    Size clientSize = this.ClientSize;   //获取窗体工作区的大小
    int left = (this.Size.Width - clientSize.Width) / 2;   //左右的边框长度
    int top = (this.Size.Height - clientSize.Height) - left;  //下边框和左右边框长度一样

        各窗体模式下的边框宽度如下: 

     

    2.坐标 

    窗体的坐标,即Location属性,是窗体左上角(不是工作区的左上角)相对于屏幕而言的。屏幕左上角是原点,原点往右为X的正方向,往下为Y的正方向。

    二、相对坐标

    1.PointToClient 

    将指定屏幕点的位置计算成工作区坐标

    Control.PointToClient(p2);

     p2坐标是相对于屏幕,即屏幕左上角原点(0,0)的坐标;假如Control相对于屏幕原点的坐标为 p1;Control.PointToClient(p2) 的结果为 p2 - p1。即以p1为原点时p2的坐标(坐标系和窗体的一致)

    PS:如果Control为Form时,p1为Form工作区相对于原点的坐标,而不是Location。 

    2.PointToScreen 

    将指定工作区点的位置计算成屏幕坐标

    Control.PointToScreen(p2);

    p2坐标是相对于屏幕,即屏幕左上角原点(0,0)的坐标;假如Control相对于屏幕原点的坐标为 p1;Control.PointToScreen(p2) 的结果为 p2 + p1。即以屏幕原点为原点p1和p2的叠加

    PS: 如果Control为Form时,p1为Form工作区相对于原点的坐标,而不是Location。 

    三、获取坐标 

     1.相对于屏幕

    Control.PointToScreen(new Point(0,0));    //获取控件相对于屏幕原点的绝对坐标

    PS:如果Control为Form时,是指工作区相对于屏幕的坐标。Form相对于屏幕的坐标就是Location

    2.相对于控件

    //Control1相对于Control2的坐标
    Control2.PointToClient(Control1.PointToScreen(new Point(0,0))); 

    3.相对于窗体 

    Control.FindForm().PointToClient(Control.PointToScreen(new Point(0,0))); 
  • 相关阅读:
    分布式git
    服务器上的git
    git分支
    剑指offer(38)二叉树的深度
    剑指offer(37)数字在排序数组中出现的次数。
    JS刷题总结
    剑指offer(36)两个链表中的第一个公共节点
    剑指offer(35)数组中的逆序对
    剑指offer(34)第一个只出现一次的字符
    剑指offer(33)丑数
  • 原文地址:https://www.cnblogs.com/bridgew/p/16138048.html
Copyright © 2020-2023  润新知