Вход/Регистрация
C# для профессионалов. Том II
вернуться

Ватсон Карли

Шрифт:

dc.Rectangle(BluePen, 0, 0, 50, 50);

Размер этого прямоугольника равен (50, 50) и может быть представлен экземпляром

Size
. Нижний правый угол также находится в точке (50, 50), но будет представляться экземпляром
Point
. Чтобы увидеть различия, предположим, что мы рисуем прямоугольник в другом месте, так что его верхняя левая координата будет (10, 10).

dc.DrawRectangle(BluePen, 10, 10, 50, 50);

Теперь нижний правый угол имеет координаты (60, 60), но размер не изменился — по-прежнему (50, 50).

Дополнительный оператор был перезагружен для точек и размеров так, чтобы можно было добавлять размер к точке задавал другую точку:

static void Main(string [] args) {

 Point TopLeft = new Point (10, 10);

 Size RectangleSize = new Size(50, 50);

 Point BottomRight = TopLeft + RectangleSize;

 Console.WriteLine("TopLeft = " + TopLeft);

 Console.WriteLine("BottomRight = " + BottomRight);

 Console.WriteLine("Size = " + RectangleSize);

}

Этот код, выполняемый как простое консольное приложение, создает следующий вывод:

Отметим, что этот вывод показывает также, как метод

ToString
объектов
Point
и
Size
был переопределен для вывода значения в формате {X, Y}.

Аналогично можно вычесть

Size
из
Point
, чтобы задать
Point
, или складывать два размера
Size
, задавая другой размер
Size
. Однако невозможно сложить точку
Point
с другой точкой
Point
. Компания Microsoft определила, что такое действие не имеет концептуального смысла, поэтому было решено не создавать никакою перезагружаемого оператора + который бы позволял это сделать.

Можно также явно преобразовать

Point
в
Size
и наоборот:

Point TopLeft = new Point(10, 10);

Size S1 = (Size)TopLeft;

Point P1 = (Point)S1;

При этом преобразовании значению

S1.Width
присваивается значение
TopLeft.X
, а
S1.Height
—
TopLeft.Y
. Следовательно,
S1
содержит (10, 10).
P1
будет содержать те же значения, что и
TopLeft
.

Rectangle и RectangleF

Эти структуры предcтавляют прямоугольную область (обычно на экране). Так же, как и в случае с

Point
и
Size
, мы рассмотрим только структуру
Rectangle
.
RectangleF
по сути идентична, за исключением того, что свойства, представляющие размеры, используют
float
, в то время как в
Rectangle
использует 
int
.

Rectangle
можно рассматривать как точку в верхнем левом углу прямоугольника и
Size
, которая представляет его размер. Один из его конструкторов действительно получает
Point
и
Size
в качестве параметров, Можно увидеть это переписывая предыдущий код рисования прямоугольника

Graphics dc = е Graphics;

Pen BluePen = new Pen(Color Blue, 3);

Point TopLeft = new Point(0, 0);

Size HowBig = new Size(50, 50);

Rectangle RectangleArea = new Rectangle(TopLeft, HowBig);

dc.DrawRectangle(BluePen, RectangleArea);

Этот код также использует альтернативное переопределение

Graphics.DrawRectangle
, который получает
Pen
и структуру
Rectangle
в качестве своих параметров.

Можно также создать

Rectangle
, используя значения в таком порядке как отдельные числа: верхняя левая горизонтальная координата, верхняя левая вертикальная координата, отдельно ширина и высота:

Rectangle RectangleArea = new Rectangle(0, 0, 50, 50)

Rectangle
имеет достаточно много свойств чтения-записи для задания или извлечения его размеров в различных комбинациях:

Свойство Описание
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
:

  • Читать дальше
  • 1
  • ...
  • 122
  • 123
  • 124
  • 125
  • 126
  • 127
  • 128
  • 129
  • 130
  • 131
  • 132
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: