SlideShare ist ein Scribd-Unternehmen logo
1 von 30
Крос-платформне програмування
Лекція 12
Користувацькі елементи керування
13 травня, 2015
Примітка: частину слайдів лекції підготовлено за
матеріалами курсу В.Снєткова
http://www.intuit.ru/studies/courses/591/447/lecture/9960
Види власних елементів керування
• Користувацький ЕК (user control, UC) – невелика
частина сторінки, яка може містити статичний
HTML-код і серверні елементи керування Web
– Можуть багаторазово використовуватися на безлічі
сторінок одного і того ж Web-застосування
– Підтримують створення своїх властивостей, подій та
методів
• Спеціалізовані серверні ЕК (server custom
control, SCC) – скомпільовані класи, які
програмним чином генерують свій власний
HTML-код
– Завжди попередньо компілюються у DLL-бібліотеки
збірок
Особливості користувацьких елементів керування
• починаються з директиви @Control, а не @Page
• файл користувацького ЕК не є окремою сторінкою,
тому не повинен містити дескриптори <html>,
<head>, <body>, <form>
• розширення користуваць-
ких ЕК – .ascx, а не .aspx
• об’єкт сторінки походить
від класу Page, а об’єкт
користувацького ЕК – від
класу UserControl
• файли прихованого коду є
нащадками класу
System.Web.UI.UserControl
• не можуть бути запитані самим клієнтом, а,
навпаки, впроваджуються в інші Web-сторінки
Створення користувацького елементу керування
Алгоритм:
1. «Add new Item» - «Web User
Control»
2. Наповнення користувацького елементу
3. Перетягування користувацького
елементу у потрібні форми
Додавання користувацького елементу керування
на стрінку
Алгоритм:
1. «Add new Item» - «Web User
Control»
2. Наповнення користувацького елементу
3. Перетягування користувацького
елементу у потрібні форми
Префікс (або умовний
простір імен) TagPrefix та
ім’я TagName дескриптора
ЕК
Файл, що містить
користувацький
ЕК
Директива
реєструє елемент
на сторінці
Обробка подій
• Стандартний ЕК LinkButton знімає з таймера
севера та відображає клієнту поточний час
Додавання властивостей
• Тестова сторінка Default2.aspx містить два елемента
керування
Порядок генерації подій ініціалізації
• Виконується віддалений запит сторінки і вона заванта-
жується у пам'ять сервера
• Конструктором класу створюється та ініціалізується
користувацький ЕК
• Присвоюються значення атрибутів, передбачені в
дескрипторі користувацького ЕК
• Створюється об'єкт батьківської сторінки
• Виконується подія Page.Load батьківської сторінки, в
обробнику Page_Load() якої можна передбачити пере-
призначення атрибутів, властивостей користувацького ЕК
• Виконується подія Page.Load користувацького ЕК
Застосування додаткових класів при створенні
складних користувацьких ЕК
1. Створити веб-форму
з розділеним кодом та
ім'ям
LinkTableTest.aspx
2. Зробити цю сторінку
стартовою
3. Додати до проекту
нову папку з ім'ям
App_Code
1
3
2
Застосування додаткових класів при створенні
складних користувацьких ЕК (2)
4. До папки App_Code додати новий клас C# з ім'ям
LinkTableItem.cs, що містить наступний код
Застосування додаткових класів при
створенні складних користувацьких ЕК (3)
5. Створити користувацький елемент керування з
розділеним кодом та ім'ям LinkTable
Елемент Table
з вкладки
HTML
Елемент Image
з вкладки
HTML
Елемент
HyperLink з
вкладки Standard
Елемент Label з вкладки
Standard
Елемент DataList
з вкладки Data
Застосування додаткових класів при
створенні складних користувацьких ЕК (4)
6. До файлу LinkTable.ascx.cs користувацького ЕК додати
наступний код
7. Розмістити користувацький ЕК на тестовій сторінці
LinkTableTest.aspx
Застосування додаткових класів при
створенні складних користувацьких ЕК (5)
8. Налаштувати файл LinkTableTest.aspx.cs
Делегати
• Делегат - об'єкт, який може посилатися на
метод
– Дозволяє динамічно під час виконання викликати
метод, на який він посилається
• Об'єкт делегата підтримує три фрагмента
інформації
– адресу методу, на якому він викликається
– аргументи (якщо вони є) цього методу
– значення, що повертається (якщо воно є), цього
методу
delegate тип_що_повертається ім’я (список_параметрів);
– тип_що_повертається - тип значення, що повертається
методами, які будуть викликатися делегатом
– ім’я - конкретне ім'я делегата
– список_параметрів - параметри, необхідні для
методів, що викликаються делегатом
Приклад: застосування методів екземпляра в
якості делегатів
• Метод, що викликається,
може бути методом
екземпляра, пов'язаним з
об'єктом, або статичним
методом, пов'язаним з
конкретним класом
• Тип і сигнатура метода,
що повертається, повинні
співпадати з тими, які
вказані в оголошенні
делегата
• Коли відбувається звер-
нення до екземпляра
делегата IntOperation,
викликається метод, на
який він посилається
Приклад: групова адресація
• Групова адресація – можли-
вість створити список або
ланцюжок викликів для
методів, які викликаються
автоматично при зверненні
до делегата
• Для цього достатньо
отримати екземпляр
делегата, а потім додати
методи в ланцюжок за
допомогою оператора +
або +=
• Для видалення методу
служить оператор - або -=
Подія
• Подія - автоматичне повідомлення про те, що
відбулася деяка дія
– об'єкт, що виявляє інтерес до події, реєструє
обробник цієї події
– коли подія відбувається, викликаються всі зареєстро-
вані обробники цієї події
– обробники подій зазвичай представлені делегатами
– події підтримують групову адресацію, що дозволяє
декільком об'єктам реагувати на повідомлення про
подію
• Оголошення події
event делегат_події ім’я_події;
– делегат_події - ім'я делегата, використовуваного для
підтримки події
– ім’я_події - конкретний об'єкт оголошеної події
Обробка подій у середовищі .NET Framework
• Об'єкт надає свої методи-обробники для
реагування на виникнення події. Говорять, що
об'єкт підписався на деяку подію
• Оголошення обробника подій
void обробник(object відправник, EventArgs е)
{ ... }
– відправник - посилання на об'єкт, що формує подію
– е - параметр типу EventArgs, що містить додаткову
інформацію про подію, яка потрібна обробнику
• Клас EventArgs не містить поля, які можна
використати для передачі обробнику додаткових
даних, він служить базовим класом, від якого
отримують похідний клас, що містить всі
необхідні поля
Додавання подій
1. Стандартний елемент asp:HyperLink не має жодних
подій, тому у попередньому прикладі у файлі
LinkTableExt.ascx його необхідно замінити на елемент
asp:LinkButton (в шаблоні <ItemTemplate>
дескрипторного подання з'явиться нове ім'я атрибута
CommandArgument), який має подію Click
Додавання подій (2)
2. Оголосити клас LinkTableEventArgs для упаковки
переданої в подію інформації та делегата події в
глобальній області видимості у файлі LinkTableExt.ascx.cs
підтримки користувацького ЕК
Додавання подій (3)
3. У файлі LinkTableExt.ascx у режимі Design створити оброб-
ник для події ItemCommand; додати до класу LinkCommand
наступний код:
Додавання подій (4)
4. У режимі Design тестової сторінки розмістіть елемент
asp:Label з вкладки Standard, задайте йому ім'я lblInfo
5. У файлі LinkTableExtTest.aspx.cs заповніть обробник
LinkClicked наступним кодом
Додавання подій (5)
6. Підключити обробник можна двома способами:
•додати ім’я згенерованого обробника в атрибут
OnLinkClicked дескриптора <uc1:LinkTable> файлу
тестової сторінки LinkTableExtTest.aspx
•підключити обробник за допомогою коду делегата у
файлі LinkTableExtTest.aspx.cs в кінці обробника події
Page_Load() класу LinkTableTest
Додавання подій (6)
7. Запустіть тестову сторінку LinkTableExtTest.aspx та
отримайте результат
Динамічне завантаження користувацьких ЕК
• Створювати методом Page.LoadControl() при
кожному завантаженні сторінки в обробнику її події
Page.Load екземпляр класу користувацького
елемента керування, заздалегідь підготовленого в
файлах *.ascx та *.ascx.cs
• Резервувати за допомогою елемента PlaceHolder
місце розміщення для точного позиціонування на
сторінці користувацького елемента керування
• Обов'язково присвоювати після динамічного
створення значення властивості ID користувацького
елемента керування, особливо, коли створюється
кілька примірників одного і того ж елемента
Створити екземпляр класу
підтримки користувацького ЕК
Додати об'єкт у зарезервоване
місце сторінки
Перетворення сторінки .aspx в
користувацький елемент керування .asсx
• Розробити звичайну сторінку, налаштувати її та
перевірити у дії
• Перейменувати розширення файлу з .aspx у .ascx
• Директиву @Page разом з її атрибутами слід
видалити і замінити директивою @Control
<%@ Control language="c#" ... %>
• Видалити з коду усі дескриптори <html>, <body>,
<form>, <head>
• У коді файлу замінити базовий клас сторінки
System.Web.UI.Page на
System.Web.UI.UserControl
• Якщо використовується модель сумісного коду, то
потрібно в директиву @Control обов'язково додати
атрибут ClassName="ім’я_файла_або_будь-
яке_ім’я"
Портальні каркаси
Items[i] Text Value
Items[1] Верхній колонтитул HeaderTest.ascx
Items[2] Кнопка «дата-час» TimeDisplayTest.ascx
Items[3] Список гіперпосилань LinkTableTest.ascx
Items[4] Контрольований список гіперпосилань LinkTableExtTest.ascx
Декларативні налаштування об’єктів DropDownList
Портальні каркаси (2)
Література
• Мэтью Мак-Дональд, Марио Шпушта.
Microsoft ASP.NET 3.5 с примерами
на C# 2008 и Silverlight 2 для
профес-сионалов.: Пер. с англ. – М.:
ООО "И.Д. Вильямс", 2009. – 1408 с.
• Рихтер Дж. CLR via C#. Программиро-
вание на платформе Microsoft .NET
Framework 4.0 на языке C#. 3-е изд. –
СПб.: Питер, 2012. – 928 с.
• Корисні ресурси
– http://msdn.microsoft.com/ru-ru/library/
– http://www.intuit.ru/studies/courses/
591/447/lecture/9960
Дякую за увагу

Weitere ähnliche Inhalte

Ähnlich wie Lec12 користувацькi елементи керування ed

10 asp.net
10 asp.net 10 asp.net
10 asp.net eleksdev
 
V24 com to_net
V24 com to_netV24 com to_net
V24 com to_netRingonoki
 
Aspnet core
Aspnet coreAspnet core
Aspnet coreeleksdev
 
Lecture 06. iOS Programming. Основи Objective-C
Lecture 06. iOS Programming. Основи Objective-CLecture 06. iOS Programming. Основи Objective-C
Lecture 06. iOS Programming. Основи Objective-CMaksym Davydov
 
Docsvision Кирильчук Сергій
Docsvision Кирильчук СергійDocsvision Кирильчук Сергій
Docsvision Кирильчук СергійDokymentoznavstvo111
 
ASP.NET Core лекція 02.pptx
ASP.NET Core лекція 02.pptxASP.NET Core лекція 02.pptx
ASP.NET Core лекція 02.pptxIhor34
 
System programing module 2
System programing module 2System programing module 2
System programing module 2Andrii Hladkyi
 
[Knowledge Sharing] - Unit Testing by Pavlo Serdyuk (UKR)
[Knowledge Sharing] - Unit Testing by Pavlo Serdyuk (UKR)[Knowledge Sharing] - Unit Testing by Pavlo Serdyuk (UKR)
[Knowledge Sharing] - Unit Testing by Pavlo Serdyuk (UKR)Exoft LLC
 
Борис Могила "Isomorphic React apps in production"
Борис Могила "Isomorphic React apps in production"Борис Могила "Isomorphic React apps in production"
Борис Могила "Isomorphic React apps in production"Fwdays
 
Загальні принципи розроблення АРМ оператора на базі SCADA/HMI
Загальні принципи розроблення АРМ оператора на базі SCADA/HMIЗагальні принципи розроблення АРМ оператора на базі SCADA/HMI
Загальні принципи розроблення АРМ оператора на базі SCADA/HMIПупена Александр
 
iPhone Objective-C Development (ukr) (2009)
iPhone Objective-C Development (ukr) (2009)iPhone Objective-C Development (ukr) (2009)
iPhone Objective-C Development (ukr) (2009)Anatoliy Okhotnikov
 
Lesson # 46. the main components of the application for the operating system ...
Lesson # 46. the main components of the application for the operating system ...Lesson # 46. the main components of the application for the operating system ...
Lesson # 46. the main components of the application for the operating system ...Nikolay Shaygorodskiy
 
Урок 26. Елементи керування “кнопка”. Поняття об’єкту та його властивостей і ...
Урок 26. Елементи керування “кнопка”. Поняття об’єкту та його властивостей і ...Урок 26. Елементи керування “кнопка”. Поняття об’єкту та його властивостей і ...
Урок 26. Елементи керування “кнопка”. Поняття об’єкту та його властивостей і ...Василь Тереховський
 
презентація поняття події
презентація   поняття подіїпрезентація   поняття події
презентація поняття подіїOlga Sokolik
 

Ähnlich wie Lec12 користувацькi елементи керування ed (20)

10 asp.net
10 asp.net 10 asp.net
10 asp.net
 
ASP.Net part 2
ASP.Net part 2ASP.Net part 2
ASP.Net part 2
 
Design patterns part 2
Design patterns part 2Design patterns part 2
Design patterns part 2
 
Wcf module 3.3
Wcf module 3.3Wcf module 3.3
Wcf module 3.3
 
V24 com to_net
V24 com to_netV24 com to_net
V24 com to_net
 
cpp-2013 #20 Best practices
cpp-2013 #20 Best practicescpp-2013 #20 Best practices
cpp-2013 #20 Best practices
 
Aspnet core
Aspnet coreAspnet core
Aspnet core
 
Lecture 06. iOS Programming. Основи Objective-C
Lecture 06. iOS Programming. Основи Objective-CLecture 06. iOS Programming. Основи Objective-C
Lecture 06. iOS Programming. Основи Objective-C
 
Docsvision Кирильчук Сергій
Docsvision Кирильчук СергійDocsvision Кирильчук Сергій
Docsvision Кирильчук Сергій
 
ASP.NET Core лекція 02.pptx
ASP.NET Core лекція 02.pptxASP.NET Core лекція 02.pptx
ASP.NET Core лекція 02.pptx
 
Wcf module 3.5
Wcf module 3.5Wcf module 3.5
Wcf module 3.5
 
System programing module 2
System programing module 2System programing module 2
System programing module 2
 
[Knowledge Sharing] - Unit Testing by Pavlo Serdyuk (UKR)
[Knowledge Sharing] - Unit Testing by Pavlo Serdyuk (UKR)[Knowledge Sharing] - Unit Testing by Pavlo Serdyuk (UKR)
[Knowledge Sharing] - Unit Testing by Pavlo Serdyuk (UKR)
 
Борис Могила "Isomorphic React apps in production"
Борис Могила "Isomorphic React apps in production"Борис Могила "Isomorphic React apps in production"
Борис Могила "Isomorphic React apps in production"
 
Загальні принципи розроблення АРМ оператора на базі SCADA/HMI
Загальні принципи розроблення АРМ оператора на базі SCADA/HMIЗагальні принципи розроблення АРМ оператора на базі SCADA/HMI
Загальні принципи розроблення АРМ оператора на базі SCADA/HMI
 
iPhone Objective-C Development (ukr) (2009)
iPhone Objective-C Development (ukr) (2009)iPhone Objective-C Development (ukr) (2009)
iPhone Objective-C Development (ukr) (2009)
 
NodeJS.pptx
NodeJS.pptxNodeJS.pptx
NodeJS.pptx
 
Lesson # 46. the main components of the application for the operating system ...
Lesson # 46. the main components of the application for the operating system ...Lesson # 46. the main components of the application for the operating system ...
Lesson # 46. the main components of the application for the operating system ...
 
Урок 26. Елементи керування “кнопка”. Поняття об’єкту та його властивостей і ...
Урок 26. Елементи керування “кнопка”. Поняття об’єкту та його властивостей і ...Урок 26. Елементи керування “кнопка”. Поняття об’єкту та його властивостей і ...
Урок 26. Елементи керування “кнопка”. Поняття об’єкту та його властивостей і ...
 
презентація поняття події
презентація   поняття подіїпрезентація   поняття події
презентація поняття події
 

Mehr von cit-cit

лекція 5
лекція 5лекція 5
лекція 5cit-cit
 
лаборатор. 10
лаборатор. 10лаборатор. 10
лаборатор. 10cit-cit
 
лекція 19
лекція 19лекція 19
лекція 19cit-cit
 
лекція 18
лекція 18лекція 18
лекція 18cit-cit
 
лекція 17
лекція 17лекція 17
лекція 17cit-cit
 
лекція 16
лекція 16лекція 16
лекція 16cit-cit
 
лекція 12
лекція 12лекція 12
лекція 12cit-cit
 
лекція 11
лекція 11лекція 11
лекція 11cit-cit
 
лекція 10
лекція 10лекція 10
лекція 10cit-cit
 
лаборатор. 15
лаборатор. 15лаборатор. 15
лаборатор. 15cit-cit
 
лаборатор. 14
лаборатор. 14лаборатор. 14
лаборатор. 14cit-cit
 
лаборатор. 13
лаборатор. 13лаборатор. 13
лаборатор. 13cit-cit
 
лаборатор. 12
лаборатор. 12лаборатор. 12
лаборатор. 12cit-cit
 
лаборатор. 11
лаборатор. 11лаборатор. 11
лаборатор. 11cit-cit
 
лаборатор. 9
лаборатор. 9лаборатор. 9
лаборатор. 9cit-cit
 
лаборатор. 8
лаборатор. 8лаборатор. 8
лаборатор. 8cit-cit
 
лаборатор. 7
лаборатор. 7лаборатор. 7
лаборатор. 7cit-cit
 
лекція 15 (pdf.io)
лекція 15 (pdf.io)лекція 15 (pdf.io)
лекція 15 (pdf.io)cit-cit
 
лекція 14 (pdf.io)
лекція 14 (pdf.io)лекція 14 (pdf.io)
лекція 14 (pdf.io)cit-cit
 
лекція 13 (pdf.io)
лекція 13 (pdf.io)лекція 13 (pdf.io)
лекція 13 (pdf.io)cit-cit
 

Mehr von cit-cit (20)

лекція 5
лекція 5лекція 5
лекція 5
 
лаборатор. 10
лаборатор. 10лаборатор. 10
лаборатор. 10
 
лекція 19
лекція 19лекція 19
лекція 19
 
лекція 18
лекція 18лекція 18
лекція 18
 
лекція 17
лекція 17лекція 17
лекція 17
 
лекція 16
лекція 16лекція 16
лекція 16
 
лекція 12
лекція 12лекція 12
лекція 12
 
лекція 11
лекція 11лекція 11
лекція 11
 
лекція 10
лекція 10лекція 10
лекція 10
 
лаборатор. 15
лаборатор. 15лаборатор. 15
лаборатор. 15
 
лаборатор. 14
лаборатор. 14лаборатор. 14
лаборатор. 14
 
лаборатор. 13
лаборатор. 13лаборатор. 13
лаборатор. 13
 
лаборатор. 12
лаборатор. 12лаборатор. 12
лаборатор. 12
 
лаборатор. 11
лаборатор. 11лаборатор. 11
лаборатор. 11
 
лаборатор. 9
лаборатор. 9лаборатор. 9
лаборатор. 9
 
лаборатор. 8
лаборатор. 8лаборатор. 8
лаборатор. 8
 
лаборатор. 7
лаборатор. 7лаборатор. 7
лаборатор. 7
 
лекція 15 (pdf.io)
лекція 15 (pdf.io)лекція 15 (pdf.io)
лекція 15 (pdf.io)
 
лекція 14 (pdf.io)
лекція 14 (pdf.io)лекція 14 (pdf.io)
лекція 14 (pdf.io)
 
лекція 13 (pdf.io)
лекція 13 (pdf.io)лекція 13 (pdf.io)
лекція 13 (pdf.io)
 

Lec12 користувацькi елементи керування ed

  • 1. Крос-платформне програмування Лекція 12 Користувацькі елементи керування 13 травня, 2015 Примітка: частину слайдів лекції підготовлено за матеріалами курсу В.Снєткова http://www.intuit.ru/studies/courses/591/447/lecture/9960
  • 2. Види власних елементів керування • Користувацький ЕК (user control, UC) – невелика частина сторінки, яка може містити статичний HTML-код і серверні елементи керування Web – Можуть багаторазово використовуватися на безлічі сторінок одного і того ж Web-застосування – Підтримують створення своїх властивостей, подій та методів • Спеціалізовані серверні ЕК (server custom control, SCC) – скомпільовані класи, які програмним чином генерують свій власний HTML-код – Завжди попередньо компілюються у DLL-бібліотеки збірок
  • 3. Особливості користувацьких елементів керування • починаються з директиви @Control, а не @Page • файл користувацького ЕК не є окремою сторінкою, тому не повинен містити дескриптори <html>, <head>, <body>, <form> • розширення користуваць- ких ЕК – .ascx, а не .aspx • об’єкт сторінки походить від класу Page, а об’єкт користувацького ЕК – від класу UserControl • файли прихованого коду є нащадками класу System.Web.UI.UserControl • не можуть бути запитані самим клієнтом, а, навпаки, впроваджуються в інші Web-сторінки
  • 4. Створення користувацького елементу керування Алгоритм: 1. «Add new Item» - «Web User Control» 2. Наповнення користувацького елементу 3. Перетягування користувацького елементу у потрібні форми
  • 5. Додавання користувацького елементу керування на стрінку Алгоритм: 1. «Add new Item» - «Web User Control» 2. Наповнення користувацького елементу 3. Перетягування користувацького елементу у потрібні форми Префікс (або умовний простір імен) TagPrefix та ім’я TagName дескриптора ЕК Файл, що містить користувацький ЕК Директива реєструє елемент на сторінці
  • 6. Обробка подій • Стандартний ЕК LinkButton знімає з таймера севера та відображає клієнту поточний час
  • 7. Додавання властивостей • Тестова сторінка Default2.aspx містить два елемента керування
  • 8. Порядок генерації подій ініціалізації • Виконується віддалений запит сторінки і вона заванта- жується у пам'ять сервера • Конструктором класу створюється та ініціалізується користувацький ЕК • Присвоюються значення атрибутів, передбачені в дескрипторі користувацького ЕК • Створюється об'єкт батьківської сторінки • Виконується подія Page.Load батьківської сторінки, в обробнику Page_Load() якої можна передбачити пере- призначення атрибутів, властивостей користувацького ЕК • Виконується подія Page.Load користувацького ЕК
  • 9. Застосування додаткових класів при створенні складних користувацьких ЕК 1. Створити веб-форму з розділеним кодом та ім'ям LinkTableTest.aspx 2. Зробити цю сторінку стартовою 3. Додати до проекту нову папку з ім'ям App_Code 1 3 2
  • 10. Застосування додаткових класів при створенні складних користувацьких ЕК (2) 4. До папки App_Code додати новий клас C# з ім'ям LinkTableItem.cs, що містить наступний код
  • 11. Застосування додаткових класів при створенні складних користувацьких ЕК (3) 5. Створити користувацький елемент керування з розділеним кодом та ім'ям LinkTable Елемент Table з вкладки HTML Елемент Image з вкладки HTML Елемент HyperLink з вкладки Standard Елемент Label з вкладки Standard Елемент DataList з вкладки Data
  • 12. Застосування додаткових класів при створенні складних користувацьких ЕК (4) 6. До файлу LinkTable.ascx.cs користувацького ЕК додати наступний код 7. Розмістити користувацький ЕК на тестовій сторінці LinkTableTest.aspx
  • 13. Застосування додаткових класів при створенні складних користувацьких ЕК (5) 8. Налаштувати файл LinkTableTest.aspx.cs
  • 14. Делегати • Делегат - об'єкт, який може посилатися на метод – Дозволяє динамічно під час виконання викликати метод, на який він посилається • Об'єкт делегата підтримує три фрагмента інформації – адресу методу, на якому він викликається – аргументи (якщо вони є) цього методу – значення, що повертається (якщо воно є), цього методу delegate тип_що_повертається ім’я (список_параметрів); – тип_що_повертається - тип значення, що повертається методами, які будуть викликатися делегатом – ім’я - конкретне ім'я делегата – список_параметрів - параметри, необхідні для методів, що викликаються делегатом
  • 15. Приклад: застосування методів екземпляра в якості делегатів • Метод, що викликається, може бути методом екземпляра, пов'язаним з об'єктом, або статичним методом, пов'язаним з конкретним класом • Тип і сигнатура метода, що повертається, повинні співпадати з тими, які вказані в оголошенні делегата • Коли відбувається звер- нення до екземпляра делегата IntOperation, викликається метод, на який він посилається
  • 16. Приклад: групова адресація • Групова адресація – можли- вість створити список або ланцюжок викликів для методів, які викликаються автоматично при зверненні до делегата • Для цього достатньо отримати екземпляр делегата, а потім додати методи в ланцюжок за допомогою оператора + або += • Для видалення методу служить оператор - або -=
  • 17. Подія • Подія - автоматичне повідомлення про те, що відбулася деяка дія – об'єкт, що виявляє інтерес до події, реєструє обробник цієї події – коли подія відбувається, викликаються всі зареєстро- вані обробники цієї події – обробники подій зазвичай представлені делегатами – події підтримують групову адресацію, що дозволяє декільком об'єктам реагувати на повідомлення про подію • Оголошення події event делегат_події ім’я_події; – делегат_події - ім'я делегата, використовуваного для підтримки події – ім’я_події - конкретний об'єкт оголошеної події
  • 18. Обробка подій у середовищі .NET Framework • Об'єкт надає свої методи-обробники для реагування на виникнення події. Говорять, що об'єкт підписався на деяку подію • Оголошення обробника подій void обробник(object відправник, EventArgs е) { ... } – відправник - посилання на об'єкт, що формує подію – е - параметр типу EventArgs, що містить додаткову інформацію про подію, яка потрібна обробнику • Клас EventArgs не містить поля, які можна використати для передачі обробнику додаткових даних, він служить базовим класом, від якого отримують похідний клас, що містить всі необхідні поля
  • 19. Додавання подій 1. Стандартний елемент asp:HyperLink не має жодних подій, тому у попередньому прикладі у файлі LinkTableExt.ascx його необхідно замінити на елемент asp:LinkButton (в шаблоні <ItemTemplate> дескрипторного подання з'явиться нове ім'я атрибута CommandArgument), який має подію Click
  • 20. Додавання подій (2) 2. Оголосити клас LinkTableEventArgs для упаковки переданої в подію інформації та делегата події в глобальній області видимості у файлі LinkTableExt.ascx.cs підтримки користувацького ЕК
  • 21. Додавання подій (3) 3. У файлі LinkTableExt.ascx у режимі Design створити оброб- ник для події ItemCommand; додати до класу LinkCommand наступний код:
  • 22. Додавання подій (4) 4. У режимі Design тестової сторінки розмістіть елемент asp:Label з вкладки Standard, задайте йому ім'я lblInfo 5. У файлі LinkTableExtTest.aspx.cs заповніть обробник LinkClicked наступним кодом
  • 23. Додавання подій (5) 6. Підключити обробник можна двома способами: •додати ім’я згенерованого обробника в атрибут OnLinkClicked дескриптора <uc1:LinkTable> файлу тестової сторінки LinkTableExtTest.aspx •підключити обробник за допомогою коду делегата у файлі LinkTableExtTest.aspx.cs в кінці обробника події Page_Load() класу LinkTableTest
  • 24. Додавання подій (6) 7. Запустіть тестову сторінку LinkTableExtTest.aspx та отримайте результат
  • 25. Динамічне завантаження користувацьких ЕК • Створювати методом Page.LoadControl() при кожному завантаженні сторінки в обробнику її події Page.Load екземпляр класу користувацького елемента керування, заздалегідь підготовленого в файлах *.ascx та *.ascx.cs • Резервувати за допомогою елемента PlaceHolder місце розміщення для точного позиціонування на сторінці користувацького елемента керування • Обов'язково присвоювати після динамічного створення значення властивості ID користувацького елемента керування, особливо, коли створюється кілька примірників одного і того ж елемента Створити екземпляр класу підтримки користувацького ЕК Додати об'єкт у зарезервоване місце сторінки
  • 26. Перетворення сторінки .aspx в користувацький елемент керування .asсx • Розробити звичайну сторінку, налаштувати її та перевірити у дії • Перейменувати розширення файлу з .aspx у .ascx • Директиву @Page разом з її атрибутами слід видалити і замінити директивою @Control <%@ Control language="c#" ... %> • Видалити з коду усі дескриптори <html>, <body>, <form>, <head> • У коді файлу замінити базовий клас сторінки System.Web.UI.Page на System.Web.UI.UserControl • Якщо використовується модель сумісного коду, то потрібно в директиву @Control обов'язково додати атрибут ClassName="ім’я_файла_або_будь- яке_ім’я"
  • 27. Портальні каркаси Items[i] Text Value Items[1] Верхній колонтитул HeaderTest.ascx Items[2] Кнопка «дата-час» TimeDisplayTest.ascx Items[3] Список гіперпосилань LinkTableTest.ascx Items[4] Контрольований список гіперпосилань LinkTableExtTest.ascx Декларативні налаштування об’єктів DropDownList
  • 29. Література • Мэтью Мак-Дональд, Марио Шпушта. Microsoft ASP.NET 3.5 с примерами на C# 2008 и Silverlight 2 для профес-сионалов.: Пер. с англ. – М.: ООО "И.Д. Вильямс", 2009. – 1408 с. • Рихтер Дж. CLR via C#. Программиро- вание на платформе Microsoft .NET Framework 4.0 на языке C#. 3-е изд. – СПб.: Питер, 2012. – 928 с. • Корисні ресурси – http://msdn.microsoft.com/ru-ru/library/ – http://www.intuit.ru/studies/courses/ 591/447/lecture/9960

Hinweis der Redaktion

  1. Подія – вбудований механізм C#, за допомогою якого автоматично забезпечується повідомлення зареєстрованих об&amp;apos;єктів щодо необхідності виконання ними певних дій Об&amp;apos;єкт надає свої методи-обробники для реагування на виникнення події. Говорять, що об&amp;apos;єкт підписався на деяку подію Делегати представляються спеціальним класом, який визначає сигнатуру, переданої з подією інформації сторони-відправника, і сигнатуру обробників події сторони-приймача За допомогою конструктора делегата при створенні його нового екземпляра в подію додається посилання на обробник і встановлюється контроль за сигнатурою цього обробника. Цей процес називається реєстрацією події у класі або підпискою на подію Події підтримують багатодресатну передачу (multicasting) – одна й та ж подія може приймати багато об&amp;apos;єктів, але обробляти цю подію кожен об&amp;apos;єкт буде своїм методом, який він вказав у конструкторі делегата при підписці на цю подію