* При перепечатке материалов ссылка на www.SeoLiga.ru обязательна!
Подключение класса DoughnutMachine к пользовательскому интерфейсу
8 февраля 2009
Сейчас вы добавите к классу frmMain код для создания экземпляра класса DoughnutMachine, выпекаюшего пончики для виртуального магазина, а также код для выбора сорта пончиков и метод, обрабатывающий событие DoughnutComplete, генерируемое компонентом DoughnutMachine. Наконец, вы добавите метод, останавливающий производство пончиков.
1. Объявите на уровне класса переменную, представляющую экземпляр компонен- та DoughnutMachine: Visual Basic .NET Private myDoughnutMachine As DoughnutMachine Visual C# private DoughnutMachine myDoughnutMachine; 2. Напишите обработчик события frmMain_Load, который создает экземпляр клас- са DoughnutMachine и помещает его в переменную myDoughnutMachine. Вот при- мерный код такого обработчика Visual Basic .NET Private Sub frmMain_Load(ByVal sender As System.Object, ByVal e As System. EventArgs) Handles MyBase.LoacI myDoughnutMachine = New DoughnutMachine() End Sub Visual C# private void frmMain_Load(object sender. System.EventArgs e) 1 myDoughnutMachine = new DougnnutMachineO; } 3. Объявите закрытые переменные для учета количества пончиков: Visual Basic .NET Private mRaisedGlazed As Integer Private mRaisedSugar As Integer Private mRaisedChocolate As Integer Private mCakePlain As Integer Private mCakeChocolate As Integer Private mCakeSugar As Integer Private mFilledLemon As Integer Private mFilledGrape As Integer Private mFilledCustard As Integer Visual C# private int mRaisedGlazed; private int mRaisedSugar; private int mRaisedChocolate; private int rnCakePlain; private int mCakeChocolate; private int mCakeSugar; private int mFilledLemon; private int mFilledGrape; private int mFilledCustard; 4. Создайте для элемента Make из меню Doughnuts вложенные элементы Raised, Cake и Filled, присвоив им внутренние имена mnuRaised, mnuCake и mnuFilled соответственно. Для элемента Raised создайте вложенные элементы Glazed, Sugar и Chocolate, задав для них имена mnuRaisedGlazed, tnnuRaisedSugar и mnu- Raised Chocolate. Вид готового меню в окне дизайнера показан на рис. 3-1. 5. Добавьте к обработчику события Click элемента меню mnuRaisedGlazed код, вы- зывающий метод DoughtnutMachine.MakeDoughnut с параметром, определяющим сорт пончика. Этот код также должен устанавливать свойство Checked элемента меню mnuRaisedGlazed в true, а аналогичные свойства пунктов mnuRaisedSugar и mnuRaisedChocolate — в false. Вот этот код: Visual Basic .NET Private Sub mnuRaisedGlazed_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnuRaisedGlazed.Click mnuRaisedGlazed.Checked = True mnuRaisedSugar.Checked - False mnuRaisedChocolate.Checked = False Visual C# private void mnuRaisedGlazed_Click(object sender, System. EventArgs e) { mnuRaisedGlazed. Checked - true; mnuRaisedSugar. Checked - false; mnuRaisedChocolate. Checked = ^alse; [TiyDoughnutMachine.MakeDoughnutsCDoughnutMachine.DoughnutType. Glazed); Напишите аналогичные методы для элементов меню тпи Raised Sugar и mnuRaisedChocolate. 6. Создайте метод, обрабатывающий событие DoughnutCompiete, которое генериру- ет объект myDoughnutMachine. Обработчик этого события должен увеличить на единицу переменную для учета готовых пончиков данного сорта и записать ее текущее значение а соответствующее текстовое поле. Вот пример реализации обработчика: Visual Basic .NET Private Sub DoughnijtCompleteHandler() Select Case rnyDoughnutMachine.Flavor Case DoughnutMachine.DoughnntType.Glazed mRaisedGlazed += 1 txtGlazedRaised.Text = mRaisedGlazed.ToString Case DoughnutMachine.DoughnutType.Sugar mRaisedSugar += 1 txtSugarRaised.Text = mRaisedSugar. ToString Case DoughnutMachine. DoughnutType. Chocolate TiRaisedChocolate += 1 txtChocolateRaised.Text - roRaisedChocolate.ToString End Select End Sub Visual C# orivate void DoughnutCompleteHandlerO { switch (diyDoughnutMachine. Flavor) { case DoughnutMachine. DoughnutType. Glazed: uRaisedGlazed ++; txtGlazedRaised.Text = mRaisedGlazed.ToStringO; break; case DoughnutMachine. DoughnutType. Sugar : mRaisedSugar ++; txtSugarRaised.Text - mRaisedSugar. ToStringO; break; case DoughnutMachine. DoughnutType. Chocolate: nRaisedChocolate ++; txtChocolateRaised.Text - mRaisedChocolate. ToStringO; areak; 7. Добавьте к обработчику события Forml_Load следующий код, связывающий об- работчик события Doughnut Complete, созданный ранее, с событием myDoughnut- Machine. Doughnut Complete: Visual Basic .NET AddHandler nyDoughnutMachine. DoughnutComplete, AddressOf DoughnutCompleteHandler Visual C# rnyDoughnutMacnine. DoughnutComplete += new DoughnutMachine. Doughnut- CompleteDelegate( DoughnutCompleteHandler }; 8. Добавьте к меню Doughnuts элемент, назовите его &Stop, присвойте ему внут- реннее имя mnuStop и напишите обработчик события Click для этого пункта меню, устанавливающий свойство Enabled объекта my Doughnut Machine sfalst1. Вот примерный код этого обработчика: Visual Basic .NET Private Sub mnuStop__Click(ByVal sender As System. Object, ByVal e As System. EventArgs) Handles rnnStop. Click rnyDoughnutMachine. Enabled = False End Sub Visual C# private void mnuStop_Click(ou]ect sender, System.EventArgs e) { uiyDoughnutMachine. Enabled = false; } 9. Скомпонуйте и сохраните решение. 10. Нажмите F5, чтобы запустить приложение и проверить, как оно работает. И. В меню Doughnuts выберите элемент Raised, затем Sugar. Убедитесь, что элемент Sugar помечен флажком. Каждые восемь секунд значение текстового поля Raised Sugar должно увеличиваться на единицу. Выполните те же самые действия в меню Glazed — соответствующее текстовое поле будет увеличиваться каждые 10 секунд; а период обновления поля, соответствующего сорту Chocolate, составит 15 секунд. 12. В меню Doughnuts выберите команду Stop, чтоб закончить «выпечку» пончиков. Закрепление материала ~~л~"1 Приведенные ниже вопросы помогут вам лучше усвоить основные темы данной главы. Если вы не сумеете ответить на вопрос, повторите матери- \ ал соответствующего занятия. Ответы для самопроверки — в приложении «Вопросы и ответы» в конце книги. 1. Объясните, в каких случаях преобразование типов выполняется неяв- но, а в каких — явно. В чем опасность явного преобразования типов? 2. Почему вместо значений лучше использовать в коде перечисления и константы? 3. Кратко опишите сходства и различия между массивами и наборами. 4. Чем свойства отличаются от полей? Почему для представления досту- па к открытым данным лучше применять свойства^ а не поля? 5. Объясните, что такое делегат, и расскажите, как он работает.