Книга: ЯЗЫК ПРОГРАММИРОВАНИЯ С# 2005 И ПЛАТФОРМА .NET 2.0. 3-е издание

Определение пользовательских свойств

Определение пользовательских свойств

Как и любой другой тип класса, элемент управления может определять набор свойств, с помощью которых внешние объекты смогут выяснить (или изменить) состояние этого элемента. Нам понадобится определить только три свойства. Сначала рассмотрим свойство Animate. Это свойство включает или отключает тип Timer.

// Используется для конфигурации внутреннего типа Timer.
public bool Animate {
 get { return IsAnim; }
 set {
  IsAnim = value;
  imageTimer.Enabled = IsAnim;
 }
}

Свойство PetName выполняет то, что и следует ожидать, исходя из его имени, и не требует подробных комментариев. Однако заметьте, что при установке пользователем соответствующего имени выполняется вызов Invalidate(), чтобы это имя CarControl отобразилось в нижней прямоугольной области элемента управления (сам этот шаг будет сделан чуть позже).

// Выбор имени машины.
public string PetName {
 get { return carPetName; }
 set {
  CarPetName = value;
  Invalidate();
 }
}

Далее, у нас есть свойство Speed. Вдобавок к простому изменению члена currSp, свойство Speed – это элемент, "стимулирующий" генерирование событий AboutToBlow и BlewUp, в зависимости от текущей скорости CarControl. Вот как выглядит соответствующая программная логика.

// Проверка currSp и currMaxFrame и генерирование событий.
public int Speed {
 get { return currSp; }
 set {
  // В пределах безопасной скорости?
  if (currSp ‹= maxSp) {
   currSp = value;
   currMaxFrame = AnimFrames.Lemon3;
  }
  // Вблизи взрывоопасной ситуации?
  if ((maxSp – currSp) ‹= 10) {
   if (AboutToBlow != null) {
    AboutToBlow("Чуть помедленнее, парень!");
    currMaxFrame = AnimFrames.AboutToBlow;
   }
  }
  // Превышаем?
  if (currSp ›= maxSp) {
   currSp = maxSp;
   if (BlewUp != null) {
    BlewUp("М-да… тебе крышка… ");
    currMaxFrame = AnimFrames.EngineBlown;
   }
  }
 }
}

Как видите, если текущая скорость становится лишь на 10 км/ч ниже максимальной допустимой скорости, вы генерируете событие AboutToBlow и сдвигаете верхний предел фреймов анимации к значению AnimFrames.AboutToBlow. Если пользователь превышает возможности вашего автомобиля, вы генерируете событие BlewUp и сдвигаете верхнюю границу фреймов к AnimFrames.EngineBlown. Если скорость ниже максимальной, верхний предел фреймов остается равным AnimFrames.Lemon3.

Оглавление книги


Генерация: 2.047. Запросов К БД/Cache: 3 / 0
поделиться
Вверх Вниз