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))); 

 

  • 7
    点赞
  • 44
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
要通过 C# ActiveX Automation 在 WinForms 中获取对象坐标,您可以按照以下步骤进行操作: 1. 首先,确保您已经安装了适当的 CAD 软件,并且该软件提供了 ActiveX Automation 的支持。 2. 在 Visual Studio 中创建一个 WinForms 应用程序的项目。 3. 在工具箱中找到并添加一个 AxHost 控件。AxHost 控件允许您在 WinForms 中嵌入 ActiveX 控件。 4. 右键单击 AxHost 控件并选择 "属性"。在属性窗口中,找到 "OcxState" 属性,点击 "..." 按钮以选择相应的 ActiveX 控件。 5. 在代码中,使用 AxHost 控件的名称创建一个控件实例,并初始化连接到 CAD 软件。例如: ```csharp using CADActiveX; // 创建 AxHost 控件实例 AxCADControl axCADControl = new AxCADControl(); // 连接到 CAD 软件 axCADControl.Connect(); ``` 6. 在 WinForms 界面中添加一个按钮或其他交互元素,并为其添加一个点击事件处理程序。 ```csharp private void btnGetCoordinates_Click(object sender, EventArgs e) { // 获取当前选定对象的坐标 CADObject selectedObject = axCADControl.GetSelectedObject(); double x = selectedObject.X; double y = selectedObject.Y; double z = selectedObject.Z; // 在界面上显示坐标值 txtCoordinates.Text = $"X: {x}, Y: {y}, Z: {z}"; } ``` 请注意,以上代码仅为示例,具体的实现方式可能因不同的 CAD 软件和 ActiveX 控件而异。您需要根据所使用的 CAD 软件和控件的 API 文档来确定正确的方法和属性。 希望这些信息对您有帮助!如有任何进一步的问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Bridge_go

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值