1. Крос-платформне програмування
Лекція 11
Користувацькі елементи керування
30 травня, 2014
Примітка: частину слайдів лекції підготовлено за
матеріалами курсу В.Снєткова
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. Перетягування користувацького
елементу у потрібні форми
8. Порядок генерації подій ініціалізації
• Виконується віддалений запит сторінки і вона заванта-
жується у пам'ять сервера
• Конструктором класу створюється та ініціалізується
користувацький ЕК
• Присвоюються значення атрибутів, передбачені в
дескрипторі користувацького ЕК
• Створюється об'єкт батьківської сторінки
• Виконується подія Page.Load батьківської сторінки, в
обробнику Page_Load() якої можна передбачити пере-
призначення атрибутів, властивостей користувацького ЕК
• Виконується подія Page.Load користувацького ЕК
9. Використання спеціальних об’єктів
1. Створити веб-форму
з розділеним кодом та
ім'ям
LinkTableTest.aspx
2. Зробити цю сторінку
стартовою
3. Додати до проекту
нову папку з ім'ям
App_Code
1
3
2
12. Використання спеціальних об’єктів (4)
6. Файл LinkTable.ascx.cs заповнити наступним кодом
7. Розмістити користувацький елемента керування на тестовій
сторінці LinkTableTest.aspx
14. Делегати
• Делегат - об'єкт, який може посилатися на
метод
– Дозволяє динамічно викликати метод, на який він
посилається, під час виконання
• Об'єкт делегата підтримує три фрагмента
інформації
– адресу методу, на якому він викликається
– аргументи (якщо вони є) цього методу
– значення, що повертається (якщо воно є), цього
методу
delegate тип_що_повертається ім’я (список_параметрів);
– тип_що_повертається - тип значення, що повертається
методами, які будуть викликатися делегатом
– ім’я - конкретне ім'я делегата
– список_параметрів - параметри, необхідні для
методів, що викликаються делегатом
15. Приклад: застосування методів екземпляра в
якості делегатів
• Метод, що викликається,
може бути методом
екземпляра, пов'язаним з
об'єктом, або статичним
методом, пов'язаним з
конкретним класом
• Тип і сигнатура метода,
що повертається, повинні
співпадати з тими, які
вказані в оголошенні
делегата
• Коли відбувається звер-
нення до екземпляра
делегата IntOperation,
викликається метод, на
який він посилається
16. Приклад: групова адресація
• Групова адресація – можли-
вість створити список або
ланцюжок викликів для
методів, які викликаються
автоматично при зверненні
до делегата
• Для цього достатньо
отримати екземпляр
делегата, а потім додати
методи в ланцюжок за
допомогою оператора +
або +=
• Для видалення методу
служить оператор - або -=
17. Подія
• Подія - автоматичне повідомлення про те, що
відбулася деяка дія
– об'єкт, що виявляє інтерес до події, реєструє
обробник цієї події
– коли подія відбувається, викликаються всі зареєстро-
вані обробники цієї події
– обробники подій зазвичай представлені делегатами
– події підтримують групову адресацію, що дозволяє
декільком об'єктам реагувати на повідомлення про
подію
• Оголошення події
event делегат_події ім’я_події;
– делегат_події - ім'я делегата, використовуваного для
підтримки події
– ім’я_події - конкретний об'єкт оголошеної події
18. Обробка подій у середовищі .NET Framework
• Об'єкт надає свої методи-обробники для
реагування на виникнення події. Говорять, що
об'єкт підписався на деяку подію
• Оголошення обробника подій
void обробник(object відправник, EventArgs е)
{ ... }
– відправник - посилання на об'єкт, що формує подію
– е - параметр типу EventArgs, що містить додаткову
інформацію про подію, яка потрібна обробнику
• Клас EventArgs не містить поля, які можна
використати для передачі обробнику додаткових
даних, він служить базовим класом, від якого
отримують похідний клас, що містить всі
необхідні поля
19. Додавання подій
1. Змінити тип елемента в шаблоні <ItemTemplate>
дескрипторного подання файла LinkTableExt.ascx на нове
ім'я атрибута CommandArgument
20. Додавання подій (2)
2. Оголосити клас LinkTableEventArgs для упаковки
переданої в подію інформації та делегата події в
глобальній області видимості у файлі LinkTableExt.ascx.cs
підтримки користувацького ЕК
21. Додавання подій (3)
3. У файлі LinkTableExt.ascx у режимі Design створити
обробник для події ItemCommand для користувацького ЕК
22. Додавання подій (4)
4. У режимі Design тестової сторінки розмістіть елемент
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
Подія – вбудований механізм C#, за допомогою якого автоматично забезпечується повідомлення зареєстрованих об&apos;єктів щодо необхідності виконання ними певних дій
Об&apos;єкт надає свої методи-обробники для реагування на виникнення події. Говорять, що об&apos;єкт підписався на деяку подію
Делегати представляються спеціальним класом, який визначає сигнатуру, переданої з подією інформації сторони-відправника, і сигнатуру обробників події сторони-приймача
За допомогою конструктора делегата при створенні його нового екземпляра в подію додається посилання на обробник і встановлюється контроль за сигнатурою цього обробника. Цей процес називається реєстрацією події у класі або підпискою на подію
Події підтримують багатодресатну передачу (multicasting) – одна й та ж подія може приймати багато об&apos;єктів, але обробляти цю подію кожен об&apos;єкт буде своїм методом, який він вказав у конструкторі делегата при підписці на цю подію