Как компенсировать маржу из Control.PointToScreen? - PullRequest
2 голосов
/ 15 февраля 2011

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

Ответы [ 2 ]

2 голосов
/ 15 февраля 2011

Используйте свойство Forms Bounds.Это обеспечивает прямоугольник, который он занимает на экране.

. Для отдельного элемента управления вы можете использовать Parent.RectangleToScreen (Bounds), чтобы получить прямоугольник экрана.границы контроля.

0 голосов
/ 15 февраля 2011

Вы можете использовать для этой цели свойства ClientRectangle и ClientSize .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...