【问题标题】:c# absolute position of control on screenc#屏幕上控件的绝对位置
【发布时间】:2013-08-28 01:47:55
【问题描述】:

我正在尝试获取控件在屏幕上的绝对位置。我正在使用两台显示器,结果并不是那么好......

我正在做的是打开另一个表单来捕获图像,然后将此图像传递给主表单并关闭捕获表单。然后我希望主窗体出现在捕获图片的同一位置。要了解我正在尝试做的事情的要点,请在 Windows 上打开 Snipping Tool 并捕获一个片段。然后窗口将出现在拍摄图像的位置。

这是我用来执行此操作的当前代码:

Location = new Point(Cursor.Position.X - CaptureBox.Width - CapturePanel.Location.X - CaptureBox.Location.X - 8, Cursor.Position.Y - CaptureBox.Height - CapturePanel.Location.Y - CaptureBox.Location.Y - 30);

CapturePanel 包含存储图片的 CaptureBox 控件。我还从 X 位置取 8,从 te Y 位置取 30 来补偿表单的边框和标题栏,但唯一的问题是某些计算机将使用不同的窗口样式,并且这些数字会改变。

如果有一种方法可以用来抓取窗口的边框和标题宽度/高度,那就太好了。

编辑

解决方案是:

Location = new Point(
    Cursor.Position.X -
    CaptureBox.Width -
    CapturePanel.Location.X -
    CaptureBox.Location.X - 
    SystemInformation.HorizontalResizeBorderThickness,
    Cursor.Position.Y -
    CaptureBox.Height -
    CapturePanel.Location.Y -
    CaptureBox.Location.Y -
    SystemInformation.CaptionHeight -
    SystemInformation.VerticalResizeBorderThickness
);

在 King King 的帮助下向我指出 SystemInformation。

【问题讨论】:

    标签: c# position controls


    【解决方案1】:

    要获取Window caption 的Height,您可以试试这个:

    int captionHeight = yourForm.PointToScreen(Point.Empty).Y - yourForm.Top;    
    

    要获取表单边框的Width,可以试试这个:

    int borderWidth = yourForm.PointToScreen(Point.Empty).X - yourForm.Left;
    

    您可能还想查看SystemInformation.CaptionHeight 的默认标题高度。

    如果要获取CaptureBox在屏幕坐标中的位置,可以使用PointToScreen方法:

    Point loc = CaptureBox.PointToScreen(Point.Empty);
    

    【讨论】:

    • 第一种方法有效,SystemInformation.CaptionHeight 小于应有的值。窗口边框大小呢?
    • @Dragonphase 如果你想得到CaptureBox的位置,看我更新的答案,不需要计算Border size。
    • 那行不通,因为我没有将捕获图像的位置传递给主窗体。如果我这样做,它会导致将绝对位置(例如,1440)添加到主监视器上当前选定的表单位置。然而,我想出了一个解决方案,它在我的主要帖子中。
    • @Dragonphase 你说你想把你的表单放在屏幕坐标中CaptureBox 的位置?
    • 不,引用I then want the main form to appear in the same place the picture was captured - CaptureBox 的位置仅在它需要在CapturePanel 中居中时才会更改;更具体地说,我希望CaptureBox 出现在与用于在捕获表单中捕获图像的矩形完全相同的位置,从而分别更新表单的位置。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-12-19
    • 2022-01-07
    • 1970-01-01
    • 2011-08-03
    • 1970-01-01
    • 1970-01-01
    • 2011-06-27
    相关资源
    最近更新 更多