Эндрю Троелсен - ЯЗЫК ПРОГРАММИРОВАНИЯ С# 2005 И ПЛАТФОРМА .NET 2.0. 3-е издание

Тут можно читать онлайн Эндрю Троелсен - ЯЗЫК ПРОГРАММИРОВАНИЯ С# 2005 И ПЛАТФОРМА .NET 2.0. 3-е издание - бесплатно полную версию книги (целиком) без сокращений. Жанр: comp-programming, издательство Издательский дом Вильямс, год 2007. Здесь Вы можете читать полную версию (весь текст) онлайн без регистрации и SMS на сайте лучшей интернет библиотеки ЛибКинг или прочесть краткое содержание (суть), предисловие и аннотацию. Так же сможете купить и скачать торрент в электронном формате fb2, найти и слушать аудиокнигу на русском языке или узнать сколько частей в серии и всего страниц в публикации. Читателям доступно смотреть обложку, картинки, описание и отзывы (комментарии) о произведении.
  • Название:
    ЯЗЫК ПРОГРАММИРОВАНИЯ С# 2005 И ПЛАТФОРМА .NET 2.0. 3-е издание
  • Автор:
  • Жанр:
  • Издательство:
    Издательский дом Вильямс
  • Год:
    2007
  • Город:
    Москва • Санкт-Петербург • Киев
  • ISBN:
    ISBN 5-8459-1124-9
  • Рейтинг:
    3.2/5. Голосов: 101
  • Избранное:
    Добавить в избранное
  • Отзывы:
  • Ваша оценка:
    • 60
    • 1
    • 2
    • 3
    • 4
    • 5

Эндрю Троелсен - ЯЗЫК ПРОГРАММИРОВАНИЯ С# 2005 И ПЛАТФОРМА .NET 2.0. 3-е издание краткое содержание

ЯЗЫК ПРОГРАММИРОВАНИЯ С# 2005 И ПЛАТФОРМА .NET 2.0. 3-е издание - описание и краткое содержание, автор Эндрю Троелсен, читайте бесплатно онлайн на сайте электронной библиотеки LibKing.Ru

В этой книге содержится описание базовых принципов функционирования платформы .NET, системы типов .NET и различных инструментальных средств разработки, используемых при создании приложений .NET. Представлены базовые возможности языка программирования C# 2005, включая новые синтаксические конструкции, появившиеся с выходом .NET 2.0, а также синтаксис и семантика языка CIL. В книге рассматривается формат сборок .NET, библиотеки базовых классов .NET. файловый ввод-вывод, возможности удаленного доступа, конструкция приложений Windows Forms, доступ к базам данных с помощью ADO.NET, создание Web-приложений ASP.NET и Web-служб XML. Книга содержит множество примеров программного кода, призванного помочь читателю в освоении предлагаемого материала. Программный код примеров можно загрузить с Web-сайта издательства.

ЯЗЫК ПРОГРАММИРОВАНИЯ С# 2005 И ПЛАТФОРМА .NET 2.0. 3-е издание - читать онлайн бесплатно полную версию (весь текст целиком)

ЯЗЫК ПРОГРАММИРОВАНИЯ С# 2005 И ПЛАТФОРМА .NET 2.0. 3-е издание - читать книгу онлайн бесплатно, автор Эндрю Троелсен
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

AbоutТоBlow, EngineBlown

}

Тип CarControl поддерживает достаточно большой набор приватных данных, необходимых для представления программной логики анимации. Вот краткое описание каждого из членов.

public partial class CarControl: UserControl {

// Данные состояния.

private AnimFrames currFrame = AnimFrames.Lemon1;

private AnimFrames currMaxFrame = AnimFrames.Lemon3;

private bool IsAnim;

private int currSp = 50;

private int maxSp = 100;

private string carPetName= "Lemon";

private Rectangle bottomRect = new Rectangle();

public CarControl() {

InitializeComponent();

}

}

Как видите, здесь есть данные, представляющие текущую и максимальную скорости, название автомобиля, а также два члена типа AnimFrames. Переменная currFrame используется для указания того, какой из членов ImageList следует отобразить. Переменная currMaxFrame используется для обозначения текущего верхнего предела в ImageList (напомним, что в цикле анимации CarControl используются от трех до пяти изображений, в зависимости от скорости автомобиля). Элемент данных IsAnim используется для определения того, что автомобиль в настоящий момент находится в режиме использования анимации. Наконец, член Rectangle(bottomRect) используется для представления нижней части области CarControl. Позже в этой части элемента управления будет отображаться название автомобиля.

Чтобы разделить CarControl на две прямоугольных области, создайте приватную вспомогательную функцию с именем StretchBox(). Задачей этого члена будет вычисление правильных размеров члена bottomRect и гарантия того, что элемент PictureBox будет растянут на верхние примерно две трети поверхности типа CarControl.

private void StretchBox() {

// Конфигурация окна изображения.

currentImage.Top = 0;

currentImage.Left = 0;

currentImage.Height = this.Height – 50;

currentImage.Width = this.Width;

currentImage.Image = carImages.Images[(int)AnimFrames.Lemon1];

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

rect.bottomRect.X = 0;

bottomRect.Y = this.Height – 50;

bottomRect.Height = this.Height – currentImage.Height;

bottomRect.Width = this.Width;

}

После установки размеров каждого прямоугольника в рамках конструктора, заданного по умолчанию, вызывается StretchBox().

public CarControl() {

InitializeComponent();

StretchBox();

}

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

Тип CarControl обеспечивает поддержку двух событий, отправляемых содержащей тип форме в зависимости от текущей скорости автомобиля. Первое событие, AboutToBlow, генерируется тогда, когда скорость CarControl приближается к верхнему пределу. Событие BlewUp отправляется контейнеру тогда, когда текущая скорость становится больше позволенного максимума. Каждое из этих событий использует пользовательский делегат (CarEventHandler), который может содержать адрес любого метода, возвращающего void и получающего System.String в качестве параметра. Мы обработаем эти события чуть позже, a пока что добавьте к группе открытых элементов CarControl следующие члены.

// События и пользовательский делегат Car.

public delegatevoid CarEventHandler(string msg);

public eventCarEventHandler AboutToBlow;

public eventCarEventHandler BlewUp;

Замечание. Напомним, что "настоящий и полноценный" делегат (см. главу 8) должен указать два аргумента, первым из которых должен быть System.Object (представляющий отправителя), а вторым – тип, производный от System.EventArgs. Однако для нашего примера вполне подойдет и предложенный выше делегат.

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

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

Контроль анимации

Следующей задачей является обеспечение гарантий того, что тип Timer сместит текущий фрейм визуализации в рамках PictureBox. Снова напомним, что число фреймов в цикле анимации зависит от текущей скорости автомобиля. Необходимость изменений изображений в PictureBox возникает только тогда, когда свойство Animate равно true (истина). Начните с обработки события Tick для типа Timer, используя следующий программный код.

private void imageTimer_Tick(object sender, EventArgs s) {

if (IsAnim) currentImage.Image = carImages.Images[(int)currFrame];

// Сдвиг фрейма.

int nextFrame = ((int)currFrame) + 1;

currFrame = (AnimFrames)nextFrame;

if (currFrame › currMaxFrame) currFrame = AnimFrames.Lemon1;

}

Отображение названия

Чтобы завершить создание элемента управления, вы должны отобразить название автомобиля. Для этого обработайте событие Paint для CarControl и в рамках обработчика этого события отобразите PetName вашего CarControl в нижней прямоугольной области клиента.

Читать дальше
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать


Эндрю Троелсен читать все книги автора по порядку

Эндрю Троелсен - все книги автора в одном месте читать по порядку полные версии на сайте онлайн библиотеки LibKing.




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


Отзывы читателей о книге ЯЗЫК ПРОГРАММИРОВАНИЯ С# 2005 И ПЛАТФОРМА .NET 2.0. 3-е издание, автор: Эндрю Троелсен. Читайте комментарии и мнения людей о произведении.


Понравилась книга? Поделитесь впечатлениями - оставьте Ваш отзыв или расскажите друзьям

Напишите свой комментарий
x