* При перепечатке материалов ссылка на www.SeoLiga.ru обязательна!
Создание дополнительных типов объектов Doughnut
8 февраля 2009
Сейчас вы реализуете дополнительные функции виртуальной машины по производству пончиков и закончите инкапсуляцию функциональности компонента Doughnut Machine, скрыв свойство Enabled и добавив метод для его установки. Вы также обновите пользовательский интерфейс приложе- ния, чтобы добавить к нему поддержку новых видов пончиков. >• Создание дополнительных типов объектов Doughnut 1. Измените уровни доступа свойств Enabled и Intennalc Public (public) на Protected (protected). Это позволит скрыть эти свойства от внешних классов, инкапсулиро- вав соответствующую функциональность в классе Doughnut Machine. 2. После этото свойство Enabled станет недоступным для внешних объектов, по- этому придется добавить специальный метод для установки этого свойства: Visual Basic .NET
Public Sub StopDojghnutsO Enabled = False End Sub Visual C# public void StopDoughnutsO Enabled - false: 3. Откройте форму frmMain в окне дизайнера и добавьте к элементу меню Doughnuts\ Make\Cake вложенное меню с элементами Chocolate, Plain и Sugar. При- свойте новым элементам меню имена тпи Cake Chocolate, mnuCakePlain и tnnuCakeSugar. 4. Добавьте к элементу меню Doughnuts\Make\Filled вложенное меню с элемента- ми Lemon, Grape и Custard. Присвойте новым элементам имена mnuFilledLemon, mnuFilledGrape и mnuFilledCustard. 5. Найдите код метода mnuRaisedGlazed_Click. Замените код, который «вручную» сбрасывает выделенные пункты меню кодом, автоматически перебирает все из- вестные пункты меню и сбрасывает выделение прежде, чем будет выбран другой пункт. Это сделает код для сброса выделения у девяти пунктов меню более упра- вляемым и менее громоздким. Описанный метод реализуется так: Visual Basic .NET Private Suo mnuRaisedGlazed_Click(6yVal sender As System.Object, ByVal e As System.EventArgs) Handles mnuRaisedGlazed.Click Dim item As Menulterr Перебрать все элементы меню из группы mnuMake For Each item In mnuMake.MenuItems Oirn anotheritem As Menultem ' Снять выделение со всех элементов 1 меню из группы rnnuMake. For Each anotheritem In item.MenuItems anotheritem.Checked = False Next Next mnuRaisedGlazed.Checked = True myDoughnutMachine.MakeDoughnuts(DoughnutMachine.DoughnutType.Glazec) End Sub Visual C# private void mnuRaisedGlazed_Click(object sender, System.EventArgs e) // Перебрать все элементы меню из группы mnuMake foreach(MenuItern item in mnuMake. Menulteris) < // Снять выделение со всех элементов // меню из группы mnuMake. foreach(MenuItem anotheritem in item.MenuItems) anotheritem. Checked = false; } rnnuflaisedSugar. Checked = true; inyDoughnutMachine.MakeDoughnutst Doug hnutMachine. DoughnutType. Glazed); } 6. Аналогично внесите изменения в код методов mnuRaised Sugar _Click и mnuRaised- Chocolate__Click. 1. Добавьте сходные методы, обрабатывающие события Click элементов меню, до- бавленных в пунктах 3 и 4 этого упражнения, 8. Измените метод mnuStop_Clicki&K, чтобы он вызывал метод Stop Doughnuts объек- та DoughnutMachine, например: Visual Basic .NET Private Sub mnu3top_Click(ByVal sender As System. Object, ByVal e As System. EventArgs) Handles mnuStop. Click myDoughnutMachine. StopDoughnuts( } End Sub Visual C# private void mnuStop__Click(object sender, System. EventArgs e) { myDoughnutMachine. StopDoughnutsC ); } 9. Добавьте к методу DoughnutCompleteHandler код, который будет вести учет новых типов пончиков и обновлять соответствующие элементы управления пользова- тельского интерфейса. Для каждого типа DoughnutType должен быть свой опера- тор Case, увеличивающий значение закрытой переменной, которая представля- ет соответствующий тип DoughnutType, и отображающий обновленное значение этой переменной в соответствующем поле формы. 10. Сохраните проект и протестируйте его.