我正在使用.PointToScreen(Point.Empty);确定控件相对于整个屏幕的位置。我面临的唯一问题是,如果坐标位于表格内部,坐标总是稍微偏离。在我看来,正在发生的是表格的边距没有被考虑并导致这个错误。
我正在使用它来截取表单内的整个表单或控件的屏幕截图。当我进行完整形式的截图时,会发生的是边距再次没有考虑。 .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();
}
答案 0 :(得分:2)
使用Forms Bounds属性。这提供了它在屏幕上占据的矩形。
对于单个控件,您可以使用Parent.RectangleToScreen(Bounds)来获取屏幕矩形。
这将包括控件范围内的所有内容。
答案 1 :(得分:0)
您应该可以使用表单的ClientRectangle和ClientSize属性来实现此目的。