c# 控件在屏幕上的绝对位置

标签 c# position controls

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

我正在做的是打开另一个窗体来捕获图像,然后将此图像传递给主窗体并关闭捕获窗体。然后我希望主窗体出现在捕获图片的同一位置。举例来说,要了解我正在尝试做的事情的要点,请在 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。

最佳答案

要获取窗口标题高度,您可以试试这个:

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

要获取窗体边框的宽度,可以试试这个:

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

您可能还想通过 SystemInformation.CaptionHeight 查看默认字幕高度。

如果你想得到CaptureBox在屏幕坐标中的位置,你可以使用PointToScreen方法:

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

关于c# 控件在屏幕上的绝对位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18429425/

相关文章:

c# - 如何绑定(bind)到 XAML 中实例化类的属性

html - 我的页面向下滚动太多。可能是由于位置 : fixed elements?

android - CSS固定位置div在Android中不可点击

multithreading - 使用 OpenMP 进行复杂线程处理

c# - 如何找到试图访问不存在的数据库列的代码?

c# - 资源层面的阿兹曼

c# - 用户登录后登录 View 未更新?

matlab - 5x1 的子图彼此相邻 - 为什么我总是看到前两个正在消失?

winforms - WinForms .NET 2.0+ 的标签云控件

html - 视频和音频控件在html中不起作用