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

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

Как и любой другой тип класса, элемент управления может определять набор свойств, с помощью которых внешние объекты смогут выяснить (или изменить) состояние этого элемента. Нам понадобится определить только три свойства. Сначала рассмотрим свойство 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.