netlib.narod.ru< Назад | Оглавление | Далее >

Свойства и методы Rectangle

В структуре Rectangle определяется совокупность свойств, которые дают любую желаемую информацию:


Свойства Rectangle



Тип Свойство Доступ

Point Location Чтение/запись
Size Size Чтение/запись
int X Чтение/запись
int Y Чтение/запись
int Width Чтение/запись
int Height Чтение/запись
int Left Чтение
int Top Чтение
int Right Чтение
int Bottom Чтение
bool IsEmpty Чтение


Свойство Left возвращает то же значение, что и X, а Тор — то же значение, что и Y. Свойство Right возвращает значение суммы X и Width, a Bottom — значение суммы Y и Height, даже если Width и Height отрицательны. Иначе говоря, Left может быть больше, чем Right, a Bottom — больше, чем Тор.

Единственными операторами, перегруженными в Rectangle, являются операторы равенства (==) и неравенства (!=). Кроме того, в Rectangle реализован метод Equals. Хотя сложение и вычитание не допускаются в структурах Rectangle, есть методы, позволяющие по-разному манипулировать структурами Rectangle или создавать новые структуры Rectangle из существующих.

Для Windows-программистов, привыкших думать в терминологии «левый, верхний — правый, нижний» есть статический метод, создающий Rectangle из двух координат:


Методы Rectangle (выборочно)



static Rectangle FromLTRB(int xLeft, int yTop, int xRight, int yBottom)


Так как это статический метод, перед его именем должно стоять имя структуры. Метод возвращает новый объект Rectangle. Вызов:

  rect = Rectangle.FromLTRB(x1, у1, x2, y2);

равносилен:

  rect = new Rectangle(x1, y1, x2 - x1, y2 - y1);

Методы Offset и Inflate манипулируют структурой Rectangle и компенсируют отсутствие в ней операторов сложения и вычитания:


Методы Rectangle (выборочно)



void Offset(int x, int y)
void Offset(Point pt)
void Inflate(int x, int y)
void Inflate(Size size)


Метод Offset сдвигает прямоугольник в другое положение. Вызов метода

  rect.Offset(23, -46);

равносилен:

  rect.X += 23;
  rect.Y += -46;

или

  rect.Location += new Size(23, -46);

Перегруженная версия метода Offset принимает параметр Point (наверное, было бы правильнее использовать тип Size):

  rect.Offset(pt);

Этот вызов равносилен

  rect.X += pt.X;
  rect.Y += pt.Y;

или

  rect.Location += (Size)pt;

Метод Inflate воздействует на расположение и размер Rectangle:

  rect.Inflate(x, у);

идентичен:

  rect.X -= х;
  rect.Y -= у;
  rect.Width  += 2 * х;
  rect.Height += 2 * у;

Таким образом, прямоугольник становится большим (или меньшим, если параметр отрицателен) во всех направлениях. Центр прямоугольника остается там же. Перегруженная версия Inflate использует объект Size для указания параметров растяжения по двум осям. Статическая версия создает новый растянутый объект Rectangle из имеющегося объекта Rectangle.

Следующие методы выполняют объединение и пересечение пары объектов Rectangle:


Методы Rectangle (выборочно)



static Rectangle Union(Rectangle rect1, Rectangle rect2)
static Rectangle Intersect(Rectangle rect1, Rectangle rect2)
void Intersect(Rectangle rect)


У метода Intersect имеется перегруженная версия, не являющаяся статической. Она используется так:

  rect1.Intersect(rect2);

Это выражение равносильно:

  rect1 = Rectangle.Intersect(rect1, rect2);

Остальные уникальные методы Rectangle возвращают логические значения:


Методы Rectangle (выборочно)



bool Contains(Point)
bool Contains(int x, int y)
bool Contains(Rectangle rect)
bool IntersectsWith(Rectangle rect)


И, наконец, и в Rectangle, и в RectangleF очень удобно переопределяется ToString. Этот метод возвращает такую строку:

  {X=12,Y=5,Width=30,Height=10}

netlib.narod.ru< Назад | Оглавление | Далее >

Сайт управляется системой uCoz