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