Я использую .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();
}