我正在使用.PointToScreen(Point.Empty);确定控件相对于我整个屏幕的位置。我面临的唯一问题是,如果坐标位于表单内部,它们总是会稍微偏离一点。在我看来,正在发生的事情是表单的页边距未考虑在内并导致此错误。

http://min.us/mvnZhCJ

我正在使用它来拍摄整个表单或表单内部控件的屏幕截图。当我做一个完整的屏幕截图时,发生的是再次没有考虑到边距。 .PointToScreen(Point.Empty);给出的坐标是表单的左上角,但它在表单的内部,因此当我从此处获取屏幕截图时,它会越过右边界和下边界。

是否有自动内置的方法来解决此问题,或者我必须手动补偿此保证金错误?

static public void PrintForm(Control form) {
    Bitmap image = new Bitmap(form.Width, form.Height);
    Graphics g = Graphics.FromImage(image);
    g.CopyFromScreen(Screen.PrimaryScreen.Bounds.X, Screen.PrimaryScreen.Bounds.Y, 0, 0, Screen.PrimaryScreen.Bounds.Size, CopyPixelOperation.SourceCopy);
    g.CopyFromScreen(form.PointToScreen(Point.Empty).X, form.PointToScreen(Point.Empty).Y, 0, 0, new Size(form.Width, form.Height), CopyPixelOperation.SourceCopy);
    PrintDocument document = new PrintDocument();
    document.PrintPage += (sender, e) => Document_PrintImage(e, image);
    document.Print();
}

最佳答案

使用窗体界限属性。这提供了它在屏幕上占用的矩形。

对于单个控件,可以使用Parent.RectangleToScreen(Bounds)获取屏幕矩形。

这将包括控件范围内的所有内容。

关于c# - 如何补偿Control.PointToScreen的 margin ?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5005478/

10-11 15:59