int Left | х-координата левого края |
int Right | х-координата правого края |
int Top | у-координата верхнего края |
int Bottom | у-координата нижнего края |
int X | То же самое что и Left |
int Y | То же самое, что и Top |
int Width | Ширина прямоугольника |
int Height | Высота прямоугольника |
Point Location | Верхний левый угол |
Size Size | Размер прямоугольника |
Отметим, что эти свойства не все независимы,— например задание Width
будет влиять на значение Right
.
Region
Мы упомянем здесь о существовании класса System.Drawing.Region
, однако не будем рассматривать его подробно в этой книге. Region
представляет область на экране, которая имеет некоторую сложную форму. Например, затененная область на рисунке может быть представлена Region
:

Процесс инициализации экземпляра Region
является сам по себе достаточно сложным. В целом это можно сделать, указывая, какие компоненты простой формы составляют область либо какой маршрут необходимо пройти, чтобы обойти область по границе. Если требуется работать с такими областями, то стоит изучить класс Region
.
Замечание об отладке
Теперь мы готовы перейти к более сложным рисункам. Но сначала необходимо поговорить об отладке. Если попробовать задать точки прерывания для примеров в этой главе, то можно заметить, что отладка графических программ не является такой же простой задачей, как отладка других частей программы. Это связано с тем, что сам факт входа и выхода из отладчика часто приводит к отправке приложению сообщений Paint
. В результате может оказаться, что задание точки прерывания в методе OnPaint
заставляет приложение просто воспроизводить себя непрерывно, и поэтому оно не может делать ничего другого.
Типичный сценарий будет таков: необходимо определить, почему приложение что-то выводит неправильно, поэтому в OnPaint
задается точка прерывания. Как ожидается, приложение доходит до точки прерывания и вызывает отладчик, в результате появляется окно среды разработки MDI.
В этом окне можно проверить значения некоторых переменных и даже найти что-нибудь полезное. Для продолжения работы нажмите клавишуPaint
. Это означает, конечно, что точка прерывания тут же сработает снова. Но обычно требуется, чтобы точка прерывания сработалаOnPaint
, либо приложение никогда не сможет выйти за точку, где выводится его начальное окно.
Однако существуют способы обхода этой проблемы.
Если имеется достаточно большой экран, то простейшим способом является сохранение окна среды разработчика открытым, но так, чтобы оно не закрывало окно приложения. К сожалению, в большинстве случаев это не очень практичное решение, так как окно среды разработки будет слишком маленьким. Альтернативное решение, которое использует тот же самый принцип, состоит в том, что приложение должно объявить себя самым верхним приложением во время отладки. Это делается заданием свойства TopMost
класса Form
, что можно легко осуществить в методе InitializeComponent
:
private void InitializeComponent() {
this.TopMost = true;
Это означает, что приложение никогда не будет закрыто другими окнами (только другими самыми верхними окнами). Оно всегда остается поверх других окон, даже когда другое приложение получает фокус. Так ведет себя менеджер задач.
Даже при использовании этой техники необходимо быть внимательным, так как никогда нет полной уверенности в том, что Windows не решит по какой-либо причине инициировать событие