Слайд 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
файл
користувацького ЕК не є окремою сторінкою, тому не повинен містити
дескриптори , , ,
Слайд 4Створення користувацького елементу керування
Алгоритм:
«Add new Item» - «Web User Control»
Наповнення
користувацького елементу
Перетягування користувацького елементу у потрібні форми
Слайд 5Додавання користувацького елементу керування
на стрінку
Алгоритм:
«Add new Item» - «Web
User Control»
Наповнення користувацького елементу
Перетягування користувацького елементу у потрібні форми
Слайд 6Обробка подій
Стандартний ЕК LinkButton знімає з таймера севера та відображає
клієнту поточний час
Слайд 7Додавання властивостей
Тестова сторінка Default2.aspx містить два елемента керування
Слайд 8Порядок генерації подій ініціалізації
Виконується віддалений запит сторінки і вона заванта-жується
у пам'ять сервера
Конструктором класу створюється та ініціалізується користувацький ЕК
Присвоюються
значення атрибутів, передбачені в дескрипторі користувацького ЕК
Створюється об'єкт батьківської сторінки
Виконується подія Page.Load батьківської сторінки, в обробнику Page_Load() якої можна передбачити пере-призначення атрибутів, властивостей користувацького ЕК
Виконується подія Page.Load користувацького ЕК
Слайд 9Використання спеціальних об’єктів
1. Створити веб-форму з розділеним кодом та ім'ям
LinkTableTest.aspx
2. Зробити цю сторінку стартовою
3. Додати до проекту нову папку
з ім'ям App_Code
Слайд 10Використання спеціальних об’єктів (2)
4. До папки App_Code додати новий клас
C# з ім'ям LinkTableItem.cs, що містить наступний код
Слайд 11Використання спеціальних об’єктів (3)
5. Створити користувацький елемент керування з розділеним
кодом та ім'ям LinkTable
Слайд 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. Змінити тип елемента в шаблоні дескрипторного подання
файла 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 дескриптора файлу тестової сторінки 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#" ... %>
Видалити з коду усі дескриптори , ,
Слайд 27Портальні каркаси
Декларативні налаштування об’єктів 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