Сетевая библиотекаСетевая библиотека

КПП (Методические указания к выполнению лабораторных работ)

Дата публикации: 04.02.2019
Тип: Текстовые документы DOC
Размер: 688 Кбайт
Идентификатор документа: -165866517_491713544
Файлы этого типа можно открыть с помощью программы:
Microsoft Word из пакета Microsoft Office
Для скачивания файла Вам необходимо подтвердить, что Вы не робот


Не то что нужно?


Вернуться к поиску
Лабораторна робота №1. Основи роботи з MS Visual Studio, мова С# Ціль роботи Опрацювати основні поняття кросплатформного програмування. Ознайомитися з середовищем MS VisualStudio та С#, особливостями розробки додатків, опанувати інструментальними засобами Порядок виконання лабораторної роботи Дослідити Основне вікно інтегрованого середовища розробки С# Builder, Головне меню, Інспектор об'єктів й т.д., для чого ознайомитись з матеріалом, що викладено на стор.30-55 у джерелі [1] рекомендованого списку літератури. Відповісти на запитання по цьому матеріалу. Встановити на персональному ПК інтегровану середу MS Visual Studio 2008. Дослідити її відповідність до теоретичного опису та працездатність середовища, виконавши практичне завдання з стор.51. Фраза, що виводиться у Вашому додатку повинна мати вид: Перший додаток на C# студента гр._____ ПІБ. Продемонструвати на персональному ПК виконання цього завдання. Ознайомитися з особливостями мови С#. Сформувати звіт, що містить. Вступну частину Відповіді на запитання до лекційного матеріалу. Копії екрану з результатами виконання практичного завдання з стор.51 Виконати вправи з стор.81 підручника. Навести в звіті. 5. Зробити Висновки. Питання до матеріалу Що таке інтерфейс компонента і яке його призначення? Що таке компонент, чим він відрізняється від класу? Що визначає інтерфейсний контракт? Що являє собою інтерфейс компонента? Основні властивості компонентів? Рівні кросплатформності і різниця між ними? У яких випадках використовується компіляція через проміжний код? Для чого використовується компонентний каркас? Що таке компонентна модель і яке її призначення? Що таке збірка, її особливості, склад, призначення. Что такое .NET Framework. Разработчик, версии, назначение В чем заключаются основные преимущества .NET Framework Опишите состав .NET Framework В чем особенности написания приложений с помощью .NET Framework Что такое код MSIL. Расшифруйте понятие. Что такое JIT-компилятор. Для чего он предназначен. Что такое сборка и что входит в ее состав Опишите назначение и особенности языка С# Охарактеризуйте состав Visual Studio 2008 Опишите различия Visual Studio 2008 и Visual Studio 2008Express Питання по середовищу програмування С# Отобразить и описать общий вид рабочего (начального) окна Visual Studio. Укажите перечень окон, которые желательно (удобно) закрепить на экране для дальнейшей работы Перечислите этапы создания простого консольного приложения в Visual Studio Для чего предназначено и что отображается в окне Solution Explorer Для чего предназначено и что отображается в окне Properties Для чего предназначено и что отображается в окне Error List Література 1. Уотсон К., Нейгел К, и др. "Visual C# 2008. Базовый курс", Wiley Publishing, 2009. - 1211с Лабораторна робота №2. Створення консольного та Windows-проекту Ціль роботи Опрацювати основні методи побудови консольного проекту та його Windows-прототипу Порядок виконання лабораторної роботи Зробити мовний опис порядку побудови й особливостей консольного проекту у середовищі С#. Зробити мовний опис порядку побудови й особливостей Windows-проекту у середовищі С# Відобразити блок-схемою порядок побудови а)консольного, б) Windows- проекту в С#. Розробити проект консольного й Windows типу до задачі вашого варіанту (вибрати за номером у журналі). Повторити основні оператори С# (стор.82-113 з джерела [1] рекомендованого списку літератури). Виконати вправи 1-3 з стор.113. Підготуватися до відповіді на питання до матеріалу з стор.82-113. Сформувати звіт, що містить. Вступну частину Опис особливостей консольного проекту й його Windows-варіанту. Загальну блок-схему з порядком побудови а)консольного, б) Windows- проекту в С#. Копії екрану з результатами виконання практичного завдання з стор.113 Результати роботи консольного проекту Вашої задачі (див. варіант) Результати роботи Windows-проекту для тієї ж задачі. Поєднати консольне й Windows-рішення в одному проекті. Описати цю процедуру. Зробити Висновки. Література Уотсон К., Нейгел К, и др. "Visual C# 2008. Базовый курс", Wiley Publishing, 2009. - 1211с Варіанти завдань до лабораторної роботи 2 1 Реалізувати функцію обчислення суми та різниці двох цілих чисел 2 Реалізувати функцію піднесення до кубу частки двох цілих чисел 3 Реалізувати функцію обчислення добутку двох цілих чисел. 4 Реалізувати функцію обчислення частки двох цілих чисел 5 Реалізувати функцію обчислення суми двох дійсних чисел 6 Реалізувати функцію обчислення різниці двох дійсних чисел 7 Реалізувати функцію обчислення добутку двох дійсних чисел 8 Реалізувати функцію обчислення суми трьох цілих чисел 9 Реалізувати функцію піднесення в квадрат суми двох цілих чисел 10 Реалізувати функцію піднесення в квадрат різниці двох цілих чисел 11 Реалізувати функцію піднесення до кубу різниці двох цілих чисел 12 Реалізувати функцію піднесення до кубу суми двох цілих чисел. 13 Реалізувати функцію піднесення в квадрат різниці двох цілих чисел 14 Реалізувати функцію піднесення в квадрат суми двох дійсних чисел 15 Реалізувати функцію піднесення в куб різниці двох дійсних чисел 16 Реалізувати функцію піднесення в куб суми двох дійсних чисел 17 Реалізувати функцію обчислення кореню квадратного з суми двох ч дійсних чисел 18 Реалізувати функцію обчислення кореню квадратного з різниці двох чисел 19 Реалізувати функцію обчислення кореню квадратного з суми трьох дійсних чисел 20 Реалізувати функцію обчислення кореню квадратного з різниці двох дійсних чисел 21 Реалізувати функцію піднесення в куб різниці двох цілих чисел 22 Реалізувати функцію піднесення в куб суми двох цілих чисел 23 Реалізувати функцію обчислення корню кубічного з різниці двох цілих чисел 24 Реалізувати функцію обчислення корню кубічного з суми двох цілих чисел 25 Реалізувати функцію обчислення суми квадратів двох дійсних чисел У виразі число 7—дільник, число 21—ділене, число 3—значення частки Лабораторна робота №3 розробка ТА ЗБИРАННЯ компонентів типу Windows Forms Ціль роботи Побудова компонентів типу Windows Forms з застосуванням форм та елементів керування Порядок виконання лабораторної роботи Ознайомитись з теоретичними відомостями до цієї лабораторної роботи. Відповісти на запитання до матеріалу. Підготуватися до розробки проекту за темою, знайти джерело [2]. Відповісти на запитання до стор. 82-113 джерела [1] (аудиторн.). Ознайомитись з матеріалом на стор. 114-171 джерела [1]. Підготувати справку-реферат по розділам: Масиви; Особливості маніпулювання з строками у C# Правила визначення функцій; Призначення функції Main; Перегрузка функцій; Поняття делегат Підготувати звіт, що містить: відповіді на Контрольні питання і завдання до цієї теми (див.нижче). справку-реферат по вказаним розділам Література Уотсон К., Нейгел К, и др. "Visual C# 2008. Базовый курс", Wiley Publishing, 2009. - 1211с Культин Н.Б. Microsoft Visual C# в задачах и примерах. – СПб.: БХВ-Петербург, 2009. -320 с. Теоретичні відомості 1. Шаблон створення компонентів для Windows Forms 2. Структура вікна Visual Studio при створенні Windows застосунків 2.1 Вікно проекту 2.2. Меню і панель інструментів 2.3. Properties Explorer – вікно властивостей об’єктів 3.4. Вікно компонентів: Toolbox 3.5. Властивості проекту 3. Типи форм (модальні і не модальні). 3.1. Типи форм 3.2. Властивості форми 3.3. Методи форми 3.4. Події форми 4. Розміщення на формі елементів керування (Controls) 4.1. Ієрархія класів Control 4.2. Заголовки (Label) і текстові поля (TextBox) 4.3. Компонент NumericUpDown - регулятор чисел 4.4. Контейнери елементів 5. Обробка подій в елементах форми 1. Шаблони створення компонентів для Windows Forms Windows-застосунок в термінології .Net це рішення (Solition). Для компілятора це збірка (Assembly). Рішення може складатися з одного або кількох проектів. Кожний проект може складатися з кількох форм і інших файлів, рисунків, ресурсів, маніфесту (опису збірки). Відкомпільована збірка є готовим до використання компонентом. Для створення Windows-застосунку в середовищі Visual Studio потрібно вибрати тип шаблону - Windows Application, вказати назву проекту та шлях у файловій системі, де буде зберігатися проект. Класи для розробки Windows застосунків розміщені в просторі імен Windows.Forms. Для підключення цього простору при створенні проекту згідно шаблону автоматично добавляється директива імпорту: using System.Windows.Forms; Графічний інтерфейс користувача у Windows-застосунку – це сукупність форм, на яких розміщені елементи керування (Controls) та готові компоненти. Керування роботою програми виконується за допомогою меню, панелі інструментів та програмних кнопок. Форма — це клас, який задається властивостями, що визначають його зовнішній вигляд, методами, які визначають його поведінку, і подіями, що визначають взаємодію з користувачем. При створенні проекту автоматично створюється порожня форма. Це стандартний шаблон нової програми Windows Forms. На відміну від консольного застосунку, код Windows форми в C# розміщений у двох файлах, Form1.cs і Form1.designer.cs. Це так звані неповні (partial) класи. Неповні класи можуть бути розміщені у декількох файлах. При компіляції виконується формування єдиного класу. У файлі Form1.designer.cs. знаходиться код, який генерується дизайнером форми. Він містить конструктори форми і всіх елементів форми. Наприклад, namespace MyPrg { partial class Form1 { #region Windows Form Designer generated code private void InitializeComponent() { this.components = new System.ComponentModel.Container(); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.Text = "Form1"; } #endregion } } У файлі Form1.cs міститься код ініціалізації класу і члени класу (поля, властивості, методи, обробники подій). Саме з цим класом працює програміст. Крім цих двох файлів автоматично створюється статичний клас Program у файлі (Program.cs), який містить точку входу в програму. using System; using System.Windows.Forms; namespace MyPrg { static class Program { static void Main() { Application.Run(new Form1()); } } } Метод Main є точкою входу для застосунку і викликає метод Application.Run, який створює клас Form1. Клас Application – головний клас нашого застосунку. Він запускає цикл обробки повідомлень для нашого застосунку. Це прихований (Sealed) клас, його наслідування неможливе. Для керуванням роботою ми можемо використовувати методи цього класу, у нашому прикладі це метод Run. Примітка 1. Якщо змінити назву форми з Form1 на іншу у вікні властивостей, то потрібно змінити цю назву і в методі Application.Run(new Form1()); Крім того, до складу кожного застосунку входить файл з інформацією про збірку (Assembly.info). Клас System.Windows.Forms.Application Клас Application можна розглядати як "клас низького рівня", що дозволяє нам керувати поведінкою застосунку Windows Forms. Крім того, цей клас визначає набір подій на рівні всього застосунку, наприклад його закриття або простій центрального процесора. Таблиця 1. Найбільш важливі методи класу Application (всі вони є статичними) Метод класу Призначення AddMessageFilter( ) Ці методи дозволяють перехоплювати повідомлення RemoveMessageFilter( ) і виконувати з цими повідомленнями необхідні попередні дії. Для того щоб додати фільтр повідомлень, необхідно вказати клас, що реалізує інтерфейс IMessageFilter DoEvents( ) Забезпечує здатність застосунку обробляти повідомлення з черги повідомлень під час виконання якої-небудь тривалої операції. Можна сказати, що DoEvents() - це "швидкий" замінник нормальної багатопоточності Exit( ) Завершує роботу застосунку ExitThred( ) Припиняє обробку повідомлень для поточного потоку і закриває всі вікна, власником яких є цей потік Клас Application визначає багато статичних властивостей, більшість з яких доступні тільки для читання. Таблиця 2. Основні властивості класу Application Властивість Призначення CommonAppDataRegistry Повертає параметр системного реєстру, який зберігає загальну для всіх користувачів інформацію про застосунок CompanyName Повертає ім'я компанії CurrentCulture Дозволяє задати або отримати інформацію про поточну мову, для роботи з якою призначений поточний потік CurrentlnputLanguage Дозволяє задати або отримати інформацію про мову для введення інформації, одержуваної поточним потоком ProductName Для отримання імені програмного продукту, яке асоційоване з даним застосунком ProductVersion Дозволяє отримати номер версії програмного продукту StartupPath Дозволяє визначити ім'я виконуваного файла для працюючого застосунку і шлях до нього в операційній системі 2. Структура вікна Visual Studio при створенні Windows застосунків 2.1 Вікно проекту Вікно Solution Explorer – відображає дерево проекту і дозволяє управляти компонентами проекту. Наприклад, для того щоб додати в нього нову форму, просто виберіть в контекстному меню, що відкривається по клацанню правої кнопки миші, пункт Add/Add Windows Form. Крім контекстного меню проекту існує ще ряд контекстних меню, що дозволяють управляти окремими елементами проекту. Так, щоб перемкнутися з вікна дизайнера у вікно коду проекту, виберіть в контекстному меню для Forml пункт View Code. Відповідно, щоб перемкнутися назад — View Designer. Контекстне меню є в кожного елемента дерева проекту. Використання контекстного меню — це швидкий інтерактивний спосіб навігації по проекту. Приховування і відображення вікон – контекстне меню, команда Auto Hide. 2.2. Меню і панель інструментів Головне меню має контекстну залежність від поточного стану середовища, тобто містить різні пункти залежно від того, чим ви зараз займаєтеся і в якому вікні знаходитеся. Основні команди меню відображаються і в панелі інструментів. 2.3. Properties Explorer – вікно властивостей об’єктів Це вікно дозволяє працювати з властивостями форм і їх компонентів. Properties Explorer містить список всіх властивостей активного компоненту. Другою важливою задачею, яку виконує Properties Explorer, є управління подіями. Для того щоб перемкнутися на закладку подій, натисніть кнопку із зображенням блискавки у верхній частині вікна. Вікно подій дозволяє обробляти реакцію форми або компоненту на різні дії користувача або операційної системи, наприклад створити обробник подій від миші або клавіатури. В лівій частині вікна міститься список всіх доступних подій, а в правій — імен методів, які обробляють події. За замовчанням список методів порожній. Ви можете додати новий обробник, вписавши ім'я методу у відповідну комірку, або створити обробник з іменем за замовчанням. 3.4. Вікно компонентівToolbox Вікно відображає найбільш часто використовувані .NET компоненти для створення застосунків Windows. Toolbox має декілька закладок: Data, Components, Windows Forms, Clipboard Ring і General. Всі, окрім Clipboard Ring і General, містять компоненти, які можна перетягнути мишею на форму. Закладка Windows Forms включає візуальні елементи управління, такі як кнопки, списки, дерева. Закладка Data присвячена базам даних. Закладка Components містить невізуальні компоненти, найбільш представницьким серед яких є Timer. Clipboard Ring відображає вміст буфера обміну за останні N операцій копіювання або вирізування. Для вставки вмісту, який був скопійований в буфер обміну декілька операцій назад, просто клацніть двічі лівою кнопкою миші по необхідному рядку. 3.5. Властивості проекту Кожний проект має набір властивостей. Середовище Visual Studio .NET дозволяє змінювати ці настройки візуально. Виділіть в дереві Solution Explorer кореневий елемент з назвою проекту. Натисніть пункт меню View/Property Pages. З'явиться вікно властивостей проекту Common Properties/ General (табл. 3.3). Таблиця 3. Основні властивості проекту Властивість Призначення Assembly Name Ім'я збірки Output Турe Тут можна вибрати Windows Application Console Application або Class Library. За умовчанням для Windows Forms встановлюється тип Windows Application Default Namespace Використовуване за умовчанням в проекті простір імен. Startup Object Ім'я класу, що містить метод Main, який буде викликатися при запуску застосування. Application Icon Шлях до файла з піктограмою для застосування Project File Ім'я файла, що містить інформацію про проект. Project Folder Шлях до папки, що містить файл проекту. Output File Ім'я вихідного файла. Файл з таким ім'ям буде формуватися при побудові вашого застосування. Крім того, вам доцільно знати про властивості на закладці Configuration Properties/Build (табл. 3.4). Таблиця 4. Основні властивості конфігурування збірки (рішення) Властивість Призначення Conditional Compilation Constants Визначені під час компіляції проекту константи. Вони допомагають розробнику управляти ходом компіляції проекту. Optimize code Включення цієї властивості в true допомагає, в деяких випадках, збільшити продуктивність програми. Check for Arithmetic Overflow/Underflow Дозволяє контролювати вихід результату за межі допустимих значень. Allow unsafe code blocks Дозволяє використовувати в проекті ключове слово unsafe. Warning Level Визначає рівень попереджень, що відображаються при компіляції програми. Treat Warnings As Errors Дозволяє сприймати всі попередження як помилки. Output Path Шлях, де буде сформований вихідний файл. XML Documentation File Ім'я файла, в який буде записуватися документація з коментарів програми. Для формування документації необхідно використовувати меню Tools/Build Comment Web Pages. Generate Debugging Information Генерувати інформацію відладки. Ця опція повинна бути включена при відладці застосування. Краще залишити значення за замовчуванням. Дизайнер форм Дизайнер призначений для зручного і інтуїтивного створення інтерфейсу програми. До основних елементів дизайнера форм можна віднести: • Properties Window (пункт меню View /Properties Window); • Layout Toolbar (пункт меню View/Toolbars/Layout); • Toolbox (пункт меню View/Toolbox). 3. Типи форм (модальні і не модальні) 3.1. Типи форм У Windows є 2 типи форм: модальні (Modal) і не модальні. Модальність визначає поведінку фокусу вводу форми і тип інтерфейсу: однодокументний (SDI) чи багатодокументний (MDI). Модальна форма не дозволяє переключати фокус вводу на іншу форму без свого закриття. Вона є реалізацією SDI. Прикладами модальних форм є всі стандартні блоки діалогу Windows (у тому числі повідомлення про помилки). Модальні форми мають фіксований розмір і містять обмежений склад команд системного меню. Не модальна форма дозволяє переключатися на іншу форму. Вона реалізує MDI (multiple document interface). Ці форми можуть містити інші форми, які в цьому випадку називаються MDI child forms. MDI форма створюється після встановлення в true властивості IsMdiContainer. Прикладом є вікно Word або Excel. Як правило, головна форма в застосунку є не модальною. Не модальні форми мають системне меню і кнопки згортки-відновлення. Вони можуть змінювати свій розмір. Кожна форма як екземпляр класу System.Windows.Forms має властивості, методи та події. 3.2. Властивості форми Властивості визначають розмір і поведенку форми, фон, заголовок форми, особливості керування формою. Статичні властивості можна встановити двома способами: 1) написати відповідні конструктори з ініціалізацією в файлі Form1.designer.cs; 2) встановити значення властивостей у вікні властивостей (Properties) в середовищі Visual Studio. Динамічні властивості можна задавати під час виконання як реакцію на події. Основні властивості форми (класу Form) перелічені в табл. 3.5. Таблиця 5. Основні властивості форми (класу Form) Властивість Призначення Значення за замовчуванням Name Назва форми в проекті. Form1, Form2.. AcceptButton Встановлюється значення кнопки, яка буде спрацьовувати при натисненні клавіші Enter. Для того щоб ця властивість була активною, необхідна наявність принаймні однієї кнопки, розташованої на формі None BackColor Колір форми Control BackgroundImage Фоновий рисунок None CancelButton Встановлюється значення кнопки, яка буде спрацьовувати при натисненні клавіші Esc. None ControlBox Встановлюється наявність або відсутність трьох стандартних кнопок у верхньому правому кутку форми: "Згорнути", "Розгорнути" і "Закрити" Cursor Визначається вид курсора при його положенні на формі Default DrawGrid Встановлюється наявність або відсутність сітки з точок, яка допомагає форматувати елементи форми. True Font Формат шрифта Microsoft Sans Serif; 8,25pt FormBorderStyle Визначення виду границь форми. Sizable Icon Зображення іконки, що розташовується в заголовку форми. Підтримуються формати .ico. MaximizeBox Визначається активність стандартної кнопки "Розгорнути" у верхньому правому кутку форми. True MaximumSize Максимальний розмір ширини і висоти форми, що задається в пікселях. Форма буде приймати вказаний розмір при натисненні на стандартну кнопку "Розгорнути" 0;0 (У весь екран) MinimizeBox Визначається активність стандартної кнопки "Згорнути" у верхньому правому кутку форми True MinimumSize Мінімальний розмір ширини і висоти форми, що задається в пікселях. Форма буде приймати вказаний розмір при зміні її границь користувачем (якщо властивість FormBorderStyle має значення за умовчанням Sizable) 0;0 Size Ширина и висота форми 300; 300 StartPosition Визначення розташування форми при запуску застосування. WindowsDefaultLocation Text Заголовок форми. Form1, Form 2 WindowState Визначення положення форми при запуску. Можливі значення: Normal — форма запускається з розмірами, вказаними у властивості Size; Minimized — форма запускається з мінімальними розмірами, вказаними у властивості MinimumSize; Maximized — форма розгортається на весь екран Normal 3.3. Методи форми Методи забезпечують керування формою. Таблиця 6. Основні методи класу Form Ім’я методу Призначення Form.ShowDialog() Забезпечує представлення форми як модального dialog box. Form.Show() Показує форму як немодальний dialog box Form.SetDesktopLocation() Використовується для позиціонування форми на поверхні desktop Form.Activate() Активізує приховану форму Form.Hide() Приховує форму Form.Close(). Закриває форму 3.4. Події форми Події форми пов’язані із створенням, знищенням, режимами роботи форми. Таблиця 7. Основні події класу Form Подія Призначення Load Генерується один раз, безпосередньо після першого виклику методу Form.Show() або Form.ShowDialog(). Ця подія може використовуватися для первинної ініціалізації змінних і для підготовки форми до роботи (для кожної форми). OnLoad Призначення максимальних і мінімальних розмірів форми Activated Подія генерується при активізації форми. В обробнику події вставляють методи Form.Show(), Form.ShowDialog(), Form.Activate() VisibleChanged Генерується при зміні властивості Visible форми коли вона стає видимою або невидимою. Події сприяють методи Form.Show(), Form.ShowDialog(), Form.Hide(), Form.Close(). Deactivated Виникає при втраті фокусу формою в результаті взаємодії з інтерфейсом користувача або в результаті виклику методів Form.Hide() або Form.Cloze() – але тільки для активної форми. Якщо закривати неактивну форму, подія не відбудеться. Closing Виникає безпосередньо перед закриттям форми. У цей момент процес закриття форми може бути припинений і взагалі відмінений, чому сприяє розміщуваний в тілі обробника події наступний програмний код: e.Cancel = true; де e - подія типу CancelEventArgs. Closed Вже після закриття форми. В обробнику цієї події розміщується будь-який код для “очищення” після закриття форми. 4. Розміщення на формі елементів керування (Controls) 4.1. Ієрархія класів Control Форма є контейнером, в якому розміщуються елементи керування (Controls) та компоненти. Елементи керування — це компоненти, що забезпечують взаємодію між користувачем і програмою. Ці елементи розміщені в вікні Toolbox. Базовим класом є клас Control. У вікні Toolbox елементи згруповані у групи за їх призначенням. Основні групи елементів: Група командних об'єктів Елементи Button, LinkLabel, ToolBar реагують на натискання кнопки миші і негайно запускають яку-небудь дію. Група текстових об'єктів Більшість застосунків надають можливість користувачу вводити текст і, у свою чергу, виводять різну інформацію у вигляді текстових записів. Елементи TextBox, RichTextBox приймають текст, а елементи Label, StatusBar виводять його. Для обробки введеного користувачем тексту, як правило, слід натискувати на один або декілька елементів з групи командних об'єктів. Група перемикачів До цієї групи входять об'єкти класів: ComboBox, ListBox, ListView, TreeView, NumericUpDown і інші. Група контейнерів Елементи-контейнери дозволяють групувати елементи. Як правило, елементи цієї групи розташовані на формі, служать підкладкою кнопкам, текстовим полям, спискам — тому вони і називаються контейнерами. Елементи Panel, GroupBox, TabControl, крім всього іншого, розділяють можливості застосунку на логічні групи, забезпечуючи зручність роботи. Група графічних елементів Для розміщення і відображення на формі графічних елементів (піктограм, зображень, заставок) використовуються елементи Image List, Picture Box. PictureBox – об’єкт-контейнер для вставки зображень. Діалогові вікна Виконуючи різні операції з документом — відкриття, збереження, друк, попередній перегляд, — ми стикаємося з відповідними діалоговими вікнами. Класи OpenFileDialog, SaveFile Dialog, ColorDialog, PrintDialog містять вже готові операції для роботи з цими елементами. Група меню Містить елементи для створення різних типів меню: звичайного, панелі інструментів, контекстного меню. На рис. 3.1. зображено ієрархію класів Control. Рис. 1. Ієрархія класів Control 4.2. Заголовки (Label) і текстові поля (TextBox) Клас Label (мітка) дозволяє виводити на форму текстову інформацію. Клас TextBox походить безпосередньо від класу TextBoxBase, забезпечує загальними можливостями як TextBox, так і RichTextBox. Властивості, визначені в TextBoxBase. Основні властивості: Таблиця 8. Основні властивості класу TextBoxBase Властивість Призначення Name Назва поля (ідентифікатор) Text Текст AutoSize Визначає, чи буде елемент управління автоматично змінювати розмір при зміні шрифту на ньому BackColor, ForeColor Дозволяють отримати або встановити значення кольору фону і переднього плану HideSelection Дозволяє отримати або встановити значення, визначальне, чи буде текст в TextBox залишатися виділеним після того, як цей елемент управління буде виведений з фокусу MaxLength Визначає максимальну кількість символів, яка можна буде ввести в TextBox Modified Дозволяє отримати або встановити значення, що визначає, чи був текст в TextBox змінений користувачем Multiline Указує, чи може TextBox містити декілька рядків тексту Readonly Позначає TextBox як доступний тільки для читання" SelectedText, SelectionLength Містять виділений текст (або певну кількість символів) в TextBox SelectionStart Дозволяє отримати початок виділеного тексту в TextBox Wordwrap Визначає, чи буде текст в TextBox автоматично переноситися на новий рядок досягши граничної довжини рядка В TextBoxBase визначено методи для роботи з буфером обміну (Cut, Copy і Paste), відміною введення (Undo) і іншими можливостями редагування (Clear, AppendText і т. п.). З усіх подій, визначених в TextBoxBase, найбільший інтерес представляє подія TextChange. Ця подія відбувається при зміні тексту в об'єкті класу, похідному від TextBoxBase. Обробник події можна використовувати для перевірки допустимості символів, що вводяться користувачем (наприклад, припустимо, що користувач повинен вводити в полі тільки цифри або, навпаки, тільки букви). Приклад 1. Обробник події KeyPress для поля txtDisc, в яке можно вводити тільки літери private void txtDisc_KeyPress(object sender, KeyPressEventArgs e) { if (char.IsDigit(e.KeyChar)) { e.Handled = true; MessageBox.Show("Поле не може містити цифри"); } } Призначення текстовому полю обробника події виконується у вікні Propery (Events) для події KeyPress. Приклад 2. Якщо поле може містити тільки цифри, то обробник може бути таким: private void txtPIN_KeyPress(object sender, KeyPressEventArgs e) { if (!char.IsDigit(e.KeyChar) ) { e.Handled = true; lbloutput.Text ="Поле PIN повинно бути числовим"; } } Примітка Подія KeyPress блокує частину клавіатури. Крім властивостей, визначених в TextBoxBase, кожний похідний клас має власні властивості. В табл. 3.9 перелічені основні властивості класу TextBox. Таблиця 9. Основні властивості класу TextBox Властивість Призначення AcceptsReturn Дозволяє визначити, що буде, коли користувач при введенні тексту натисне на Enter. Варіанту два: або в TextBox починається новий рядок тексту, або активізується кнопка за замовчанням на формі CharacterCasing Дозволяє вибрати символ, який використовується для відображення даних, що вводяться користувачем (в полі для введення пароля) ScrollBars Дозволяє отримати або встановити значення, яке визначає, чи будуть в TextBox з декількома рядками смуги прокрутки TextAlign Дозволяє визначити вирівнювання тексту в TextBox 4.3. NumericUpDown - регулятор чисел Компонент NumericUpDown – варіант класу ComboBox, дозволяє без допомоги клавіатури вводити тільки числові значення в поле. Взагалі, цей елемент має три способи для введення даних: клацання мишкою на покажчики вгору-вниз, використання кнопок вгору-вниз на клавіатурі або введення даних в полі введення. Вибране значення визначається властивістю UpDownl.Value. Повертає десяткове число, тому потрібно конвертувати його в тип int. Приклад int Value = (int)numericUpDownl.Value; 4.4. Контейнери елементів Ціла група елементів-контейнерів в C# призначена для групування елементів. Основні контейнери: GroupBox – логічне об’єднання елементів (прапорців, перемикачів). Panel – Підтримує смуги прокрутки. Елементи Panel використовуються для економії простору на формі. Наприклад, якщо елементи, які плануємо розмістити на формі, на ній не уміщаються, то можна помістити їх всередину Panel і встановити для властивості AutoScrol1 об'єкту Panel значення true. В результаті користувач отримає можливість доступу до елементів управління, що не вміщаються, за допомогою смуг прокрутки. 5. Обробка подій в елементах форми Функції роботи з формою реалізуються у вигляді обробників подій, які викликаються при виборі відповідних елементів керування. При цьому генерується обробник подій, в який вставляється потрібний код. Наприклад, при виборі кнопки генерується подія Click. private void btmClose_Click(object sender, EventArgs e) { this.Close(); } В цьому прикладі при натисканні на кнопку btmClose викликається метод Close(), який закриває форму. Висновки Windows-форми є популяним типом програм з інтерфейсом користувача. Вони використовуються для створення як локальних, так і розподілених систем за компонентною ідеологією. В результаті компіляції рішення створюється збірка, яка є готовим до використання компонентом, самодостатнім для розгортання і виконання. До складу збірки входить маніфест та конфігураційна інформація, необхідна і достатня для інтеграції розробленої збірки з іншими. Основним об'єктом є форма, на якій розміщуються елементи керування: текстові поля, списки, кнопки тощо. І форма і її елементи є класами, тому мають властивості, методи і події, за допомогою яких реалізується функціональність програмного компонента. Збірка може мати будь-яку кількість зв'язаних між собою форм. Контрольні питання і завдання до теми 1. З яких файлів складається клас Form? Чому цей клас розділений на два файли? 2. В якому файлі знаходиться точка входу в збірку? 3. Чим модальна форма відрізняється від немодальної? 4. Що таке неповний клас? 5. Який метод і якого класу запускає програму на виконання? Як називається головний клас збірки? 6. У якому вікні VS розташовані елементи керування і стандартні компоненти? 7. За допомогою якого вікна можна налаштувати властивості форми і її елементів? 8. Як встановити на формі властивості для програмних кнопок, які будуть спрацьовувати при натисненні клавіш Enter i Esc? Які властивості при цьому слід встановити? 9. Яка різниця в елементах керування Label і TextBox? 10. Який елемент є базовим в ієрархії елементів керування? 11. Чим NumericUpDown відрізніяється від ComboBox? Лабораторна робота №4 багатофункціональні рішення. Ціль роботи Набуття навичок побудови багатофункціональних рішень з застосуванням компонентів різних класів. Порядок виконання лабораторної роботи Ознайомитись з теоретичними відомостями до цієї лабораторної роботи. Відповісти на запитання до матеріалу. Самостійно знайти інформацію по роботі з класом Календар. Підготувати звіт, що містить: Вступну частину відповіді на Контрольні питання і завдання до теми (див.нижче). справку з описом можливостей роботи компонента Календар рішення Практичних задач до Лабораторної роботи (коди програм з блоками /// ). Усі задачі розмістити в одному рішенні. Опис найстройок, що дозволили побудувати багатофункціональне рішення в одному проекті, особливості виклику додатків. Висновки Теоретичні відомості: 1. Клас ButtonBase і його основні властивості 2. Елемент кнопка. Клас Button 3. Елемент прапорець - клас CheckBox 4. Елемент перемикач – клас RadioButton 5. Активація і деактивація елементів 6. Приховування елементів 7. Динамічне створення елементів 1. Клас ButtonBase і його основні властивості Клас ButtonBase в ієрархії класів .NET забезпечує загальні можливості для групи похідних від нього класів: Button, CheckBox і RadioButton. Деякі властивості класу ButtonBase описані в табл. 1. Крім спільних властивостей кожний з класів має власні властивості. Таблиця 1. Властивості класу ButtonBase Властивість Призначення FlatStyle Дозволяє налаштувати "рельєфність" кнопки. Використовуються значення з переліку можливих значень властивості FlatStyle Image Дозволяє задати зображення, яке буде виводитися на кнопці (при цьому можна вказати точне місцезнаходження зображення). Фоновий рисунок краще налаштовувати за допомогою властивості BackgroundImage, яка визначена в базовому класі Control ImageAlign Дозволяє визначити вирівнювання зображення, розміщеного на кнопці. Використовуються значення з переліку можливих значень властивості ContentAlignment Imagelndex, ImageList Ці властивості використовуються для роботи з набором зображень (об'єктом ImageList), що виводяться на кнопці IsDefault Визначає, чи буде ця кнопка кнопкою за замовчанням (тобто спрацьовувати при натисненні на Enter) TextAlign Дозволяє отримати або встановити вирівнювання тексту на кнопці. 2. Елемент Кнопка. Клас Button Кнопка (button) - це найпростіший і найбільш застосовний з усіх елементів керування. Дозволяє організувати керування формою. Основні властивості класу наслідуються від ButtonBase і Control. Найбільш використовувана подія кнопки - Click, яка виникає при натисненні на кнопку лівою кнопкою миші. Наприклад, для того, щоб закрити форму при натисненні на кнопку Завершити, в обробнику кнопки викликаємо метод Close()? private void btmClose_Click(object sender, EventArgs e) { Close(); } Якщо рішення містить декілька форм, то для завершення роботи в обробнику кнопки викликаємо метод Application.Exit(). private void btmClose_Click(object sender, EventArgs e) { Application.Exit(); } 3. Елемент Прапорець (клас CheckBox). Для прапорця (клас CheckBox) передбачено три можливі стани. Як і тип Button, клас CheckBox успадковує більшу частину своїх властивостей від базових класів Control і ButtonBase. Проте в цьому класі існують і свої власні члени, що забезпечують додаткові унікальні можливості (табл. 2). Таблиця 2. Основні властивості класу CheckBox Властивість Призначення Appearance Налаштовує вигляд прапорця. Для цієї властивості використовуються значення з переліку можливих значень Appearance AutoCheck Дозволяє отримати або встановити значення, яке визначає, чи будуть значення Checked і CheckState, а також зовнішній вигляд прапорця автоматично змінюватися при клацанні на ньому CheckAlign Дозволяє встановити горизонтальне і вертикальне вирівнювання прапорця (квадратика) в елементі CheckBox. Використовуються значення з переліку ContentAlignment Checked Повертає значення типу bool, що представляє поточний стан прапорця (вибраний або не вибраний) Якщо для властивості ThreeState встановлено значення true, то властивість Checked буде повертати true як для явно вибраного прапорця, так і для того прапорця, для якого встановлено значення не “визначено” (indeterminate) CheckState Дозволяє отримати або встановити значення прапорця (встановлений - не встановлений - не визначено), використовуючи не true і false, як в Checked, а три значення з переліку CheckState. Звичайно використовується, якщо властивість ThreeState для прапорця має значення true (тобто він допускає три значення). ThreeState Визначає, чи будуть для прапорця використовуватися три значення (з переліку CheckState) або тільки два Enabled Повертає або задає значення, що визначає, чи активний елемент. Можливі значення: активний – true, інакше -false Можливі стани прапорця (Indeterminate можна використовувати тільки тоді, коли для властивості ThreeState встановлено значення true) наведено в таблиці 3. Таблиця 3. Можливі стани прапорця Checked Прапорець встановлений Indeterminate Значення не визначено (звичайно прапорець виглядає як "сірий", затіняє) Unchecked Прапорець знятий 4. Елемент Перемикач (Клас RadioButton) Клас RadioButton (перемикач) можна сприймати, як видозмінений прапорець, при цьому схожість між цими типами підкреслюється майже повним збігом наборів членів. Між типами RadioButton і CheckBox існують лише дві важливі відмінності: в RadioButton передбачено подію CheckedChanged (яка виникає при зміні значення Checked), а крім того, RadioButton не підтримує властивість ThreeState і не може приймати стан Indeterminate (не визначено). Таблиця 4. Основні властивості класу RadioButton Властивість Призначення Text Дозволяє отримати або встановити текст, який розміщений на перемикачі AutoCheck Дозволяє отримати або встановити значення, яке визначає, чи будуть значення Checked і CheckState, а також зовнішній вигляд перемикача автоматично змінюватися при клацанні на ньому TextAlign Дозволяє встановити горизонтальне і вертикальне вирівнювання тексту на перемикачі Checked Повертає значення типу bool, що представляє поточний стан перемикаяа (вибраний або не вибраний). Якщо перемикач включений, значення Checked = true, інакше - false. CheckState Дозволяє отримати або встановити значення прапорця (встановлений - не встановлений - не визначено), використовуючи не true і false, як в Checked, а три значення з переліку CheckState. Звичайно використовується, якщо властивість ThreeState для прапорця має значення true (тобто він допускає три значення). Enabled Повертає або задає значення, що визначає, чи активний елемент. Можливі значення: активний – true, інакше -false. Приклад 1. private void ClickMyRadioButton() { if (radioButton2.Checked) { radioButton1.PerformClick(); } } При виборі перемикача генерується подія CheckedChanged: private void radioButton1_CheckedChanged(object sender, EventArgs e) { } Перемикачі завжди використовуються в групах, які розглядаються як єдине ціле. Усередині групи перемикачів одночасно може бути вибраний тільки один перемикач. Для угрупування перемикачів в групи використовується тип GroupBox. І прапорець (CheckBox), і перемикач (RadioButton) підтримують властивість Checked, за допомогою якої зручно одержувати інформацію про стан відповідно прапорця і перемикача. Проте якщо є необхідність задіювати додатковий третій стан прапорця (не визначено - Indeterminate), то доведеться замість Checked використовувати властивість CheckState і значення з однойменного переліку CheckState. Властивість Checked частіше за все використовується в коді. 5. Активація і деактивація елементів Використання властивості Enabled дозволяє зробити елемент активним чи неактивним. Використовується частіше для динамічної зміни стану в коді. 6. Приховування елементів Властивість елемента Visible дозволяє приховати чи зробити видимим елемент на формі. Значення Visible=true робить елемент видимим, Visible=false приховує елемент. 7. Динамічне створення елементів в коді Створити елемент і налаштувати його властивості можна як в режимі дизайнера (статично), так і в самому коді форми (динамічно). Приклад 2. Створення групи з елементами RadioButton using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace Lab3 { public partial class Form1 : Form { private GroupBox groupBox1; private RadioButton radioButton2; private RadioButton radioButton1; public Form1() { InitializeComponent(); } public void InitializeRadioButtons() { this.groupBox1 = new System.Windows.Forms.GroupBox(); this.radioButton2 = new System.Windows.Forms.RadioButton(); this.radioButton1 = new System.Windows.Forms.RadioButton(); this.groupBox1.Controls.Add(this.radioButton2); this.groupBox1.Controls.Add(this.radioButton1); this.groupBox1.Location = new System.Drawing.Point(80, 75); this.groupBox1.Size = new System.Drawing.Size(200, 100); this.groupBox1.Text = "Radio Buttons"; this.radioButton2.Location = new System.Drawing.Point(31, 53); this.radioButton2.Size = new System.Drawing.Size(67, 17); this.radioButton2.Text = "Choice 2"; this.radioButton1.Location = new System.Drawing.Point(31, 20); this.radioButton1.Name = "radioButton1"; this.radioButton1.Size = new System.Drawing.Size(67, 17); this.radioButton1.Text = "Choice 1"; this.ClientSize = new System.Drawing.Size(292, 266); this.Controls.Add(this.groupBox1); } private void Form1_Load(object sender, EventArgs e) { InitializeRadioButtons(); } } } Приклад 3. Створення елементу CheckBox public void InstantiateMyCheckBox() { // Create and initialize a CheckBox. CheckBox checkBox1 = new CheckBox(); // Make the check box control appear as a toggle button. checkBox1.Appearance = Appearance.Button; // Turn off the update of the display on the click of the control. checkBox1.AutoCheck = false; // Add the check box control to the form. Controls.Add(checkBox1); checkBox1.Text = "Прапорець"; } Контрольні запитання і завдання 1. Яка властивість встановлює чи вимикає прапорець, в залежності від поточного значення? 2. Яке призначення властивості CheckState? 3. Яке призначення властивості Checked? 4. Яке призначення властивості Enabled? 5. Яке призначення властивості Visible і чим вона відрізняється від Enabled? 6. Що означає оператор new у виразі: CheckBox checkBox1 = new CheckBox(); 7. Що означають наступні команди? Controls.Add(checkBox1); checkBox1.Text = "Прапорець"; 8. Що означають наступні команди? private GroupBox groupBox1; private RadioButton radioButton2; private RadioButton radioButton1; 9. Чи можна прапорець, який створений в режимі дизайна форми і видимий при її завантаженні, приховати. Якщо так, то як це можна зробити? 10. Яку властивість прапорця краще використовувати для зміни стану: Visible чи Enabled? Лабораторна робота №5. Створення DLL-бібліотек Мета роботи Опрацювати методи побудови бібліотек DLL та перевірки працездатності її функцій. Порядок виконання лабораторної роботи 1. Створити DLL-бібліотеку з декількох функцій, яка містить математичні методи, необхідні для обчислення зазначеного поліному. У кожному з методів вказати XML-коментарі (). 2. Створити рішення, яке включає DLL-бібліотеку та консольний проект що тестує роботу бібліотечних методів. Показати працездатність функцій. 3. Створити DLL-бібліотеку як окреме рішення. Назвати бібліотеку ініціалами розробника (ПІБ студента). 4.Сформувати звіт, що містить. Вступну частину Опис особливостей бібліотеки, що розробляється. Перелік включених до неї функцій. Блоки коду функцій, включених до бібліотеки з описом . Блок коду консольного проекту для тестування роботи функцій бібліотеки. Результати роботи консольного тесту (копії екрану) Опис процесу створення DLL-бібліотеки як окремого рішення. Вказати назву й місце розташування цього рішення на персональному ПК. Висновки. Варіанти для розробки бібліотек DLL № вар. Зміст завдання 1 Створити DLL-бібліотеку, яка містить математичні методи для обчислення значення поліному p=a/x^3+(b/x)^3+c*sin(x)/d. Значення a,b,c,d,х – десяткові числа. Протестувати роботу бібліотечних методів. 2 Створити DLL-бібліотеку, яка містить математичні методи для обчислення значення поліному z=a*x^3 - b*x-int(c/x)^3-d/int(x). Значення a,b,c,d,х – десяткові числа. Протестувати роботу бібліотечних методів. 3 Створити DLL-бібліотеку, яка містить математичні методи для обчислення значення поліному f=2*int(x^3)+30,2*(x+cos(x))^3+8,3. Значення х – десяткові числа. Протестувати роботу бібліотечних методів. 4 Створити DLL-бібліотеку, яка містить математичні методи для обчислення значення поліному g=(a*int(-x)-b/x)^2+d*x^2+c. Значення a,b,c,d,х – десяткові числа. Протестувати роботу бібліотечних методів. 5 Створити DLL-бібліотеку, яка містить математичні методи для обчислення значення функції z=a*x^2-b*int(х)^2+exp(x*y). Значення a,b,c,d,х,y – десяткові числа. Протестувати роботу бібліотечних методів. 6 Створити DLL-бібліотеку, яка містить математичні методи для обчислення значення функції f= -a*x^2+d*c*y+ ln(b*y^2) Значення a,b,c,d,х,у – десяткові числа, значення y та х <0. Протестувати роботу бібліотечних методів. 7 Створити DLL-бібліотеку, яка містить математичні методи для обчислення значення функції z=а*cos(x)^2 - в*x*y+ с* y^2 при цілих значеннях параметрів і змінних. Протестувати роботу бібліотечних методів. 8 Створити DLL-бібліотеку, яка містить математичні методи для обчислення значення функції y=2*(int(x/2,4)^3-int(x^3)+int(4,5/x). Значення х – десяткові числа. Протестувати роботу бібліотечних методів. 9 Створити DLL-бібліотеку, яка містить математичні методи для обчислення значення поліному p=(a*x+b*x)^2-c*sin(x^3)+d. Значення a,b,c,d,х – десяткові числа. Протестувати роботу бібліотечних методів. 10 Створити DLL-бібліотеку, яка містить математичні методи для обчислення значення поліному g=(а/x+в*x)^3+с*abs(x^3)/d. Значення a,b,c,d,х – десяткові числа, у- ціле. Протестувати роботу бібліотечних методів. 11 Створити DLL-бібліотеку, яка містить математичні методи для обчислення значення поліному p=(а*x+в*sin(x))^3-a*sin(x^3). Значення a,b,х – десяткові числа, у- ціле. Протестувати роботу бібліотечних методів. 12 Створити DLL-бібліотеку, яка містить математичні методи для обчислення значення функції z=a*int(x)^3 – d/x*y- b* y^3 при будь-яких значеннях параметрів і змінних. Протестувати роботу бібліотечних методів. 13 Створити DLL-бібліотеку, яка містить математичні методи для обчислення значення поліному у=(а*x+с*x)^2 /b*cos(x^2)+d. Значення a,b,c,d,х,у – десяткові числа. Протестувати роботу бібліотечних методів. 14 Створити DLL-бібліотеку, яка містить математичні методи для обчислення значення поліному f=a*x+b*y^2-c*sin(x^4)+d. Значення a,b,c,d,х,у – негативні десяткові числа. Протестувати роботу бібліотечних методів. 15 Створити DLL-бібліотеку, яка містить математичні методи для обчислення значення поліному z=a*x^2 + b*x + c/x+abs(x/d). Значення a,b,c,d,х – десяткові числа. Протестувати роботу бібліотечних методів. 16 Створити DLL-бібліотеку, яка містить математичні методи для обчислення значення поліному y=(cos(x) +sin(x))^3 + sin(x)/cos(x) Значення х – негативні числа. Протестувати роботу бібліотечних методів. 17 Створити DLL-бібліотеку, яка містить математичні методи для обчислення значення функції p=(a*x-b*y)^2+2*sin(x)+c*d. Значення a,b,c,d,х– десяткові числа. Протестувати роботу бібліотечних методів. 18 Створити DLL-бібліотеку, яка містить математичні методи для обчислення значення функції y=a/x^3 + b/x^3 + c/(x*abs(x)) Значення a,b,c,х – негативні десяткові числа. Протестувати роботу бібліотечних методів. 19 Створити DLL-бібліотеку, яка містить математичні методи для обчислення значення функції z=a*x^2 - b*y^2 + cos(x*y) при будь-яких значеннях параметрів і змінних. Протестувати роботу бібліотечних методів. 20 Створити DLL-б біліотеку, яка містить математичні методи для обчислення значення функції y=a*x^2+ b*x^4-a*b*abs(x). Значення a,b,x– негативні десяткові числа. Протестувати роботу бібліотечних методів. 21 Створити DLL-бібліотеку, яка містить математичні методи для обчислення значення функції z=(a*x^2-b*y^2)^2-cos(x)/c-d. Значення a,b,c,d,x,y– негативні десяткові числа. Протестувати роботу бібліотечних методів. 22 Створити DLL-бібліотеку, яка містить математичні методи для обчислення значення функції y=(a-x)^3 + (b-sin(x))^3 + c*x. Значення a,b,c,x– негативні десяткові числа. Протестувати роботу бібліотечних методів. 23 Створити DLL-бібліотеку, яка містить математичні методи для обчислення значення функції p=a*x^3 – cos(b*x) ^3 + c*cos(x)+d. Значення a,b,c,d,x– негативні десяткові числа. Протестувати роботу бібліотечних методів. 24 Створити DLL-бібліотеку, яка містить математичні методи для обчислення коренів квадратного рівняння, що задане формулою a*x^2+b*x+c=0. Значення a,b,x– десяткові числа. Протестувати роботу бібліотечних методів. Теоретичні відомості та вказівки до виконання. Створити на диску папку з шифром групи, а в ній папку Lab5. В цій папці розмістити створені рішення. 1. Приклад Створення DLL-бібліотеки Запустимо Visual Studio 2008, із стартової сторінки перейдемо до створення проекту, виберемо тип проекту Class Library (Бібліотека класів) . У вікні створення DLL всі поля заповнені значеннями за замовчанням. Як правило, їх слід перевизначити, задаючи власну інформацію. У полі Name задати ім'я DLL – MyLib. У полі Location вказується шлях до каталогу, де зберігатиметься Рішення, що містить проект. Розмістіть рішення в папці Lab5 У полі Solution виберіть елемент Create New Solution, що створює нове Рішення (Альтернативою є елемент списку, що вказує, що проект може бути доданий до існуючого Рішення). У вікні Solution Name задати ім'я Рішення. Вибрати Lab5. Зверніть увагу на інші установки, зроблені в цьому вікні, - включений прапорець (за замовчанням) Create directory for solution, у верхньому віконці із списку можливих каркасів вибраний каркас Framework .Net. Задавши необхідні установки і клацнувши по кнопці OK, отримаємо автоматично побудовану заготівку проекту DLL, відкриту в середовищі Visual Studio 2008 . Імена класів повинні бути змістовними. Змінимо ім'я Class1 на ім'я MySin. Для цього у вікні коду проекту виділимо ім'я змінної об'єкту, потім в головному меню виберемо пункт Refactor (Оптимізація коду) і підпункт Rename (Перейменування). У вікні, що відкрилося, вкажемо нове ім'я. Тоді будуть показані всі місця, що вимагають перейменування об'єкту. В даному випадку буде лише одна очевидна заміна, але в загальному випадку замін багато, так що автоматична заміна всіх входжень корисна. Правило стилю: ім'я класу і ім'я файлу, що зберігає клас, повинні збігатися. Перейменування імені файлу робиться безпосередньо у вікні проектів Solution Explorer. Правило стилю: додавання коментаря. Для цього в рядку перед заголовком класу слід набрати три слеша (три косі риски). В результаті перед заголовком класу з'явиться заголовний коментар – тег summary, в який і слід додати короткий, але змістовний опис призначення класу. Теги summary, якими слід супроводжувати класи, відкриті (public) методи і поля класу відіграють три важливі ролі. Вони полегшують розробку і супровід проекту, роблячи його самодокументованим. Клієнти класу при створенні об'єктів класу отримують інтелектуальну підказку, що пояснює суть того, що можна робити з об'єктами. Спеціальний інструментарій дозволяє побудувати документацію за проектом, що включає інформацію з тегів summary. У нашому прикладі коментар до класу MySin може бути достатньо простим – Обчислення математичних функцій . Напишемо реалізацію одного методу класу – обчислення функції Sin(x) через ряд Тейлора. Спочатку напишемо коментарі до методу (у форматі XML). Далі напишемо реалізацію методу. Отримаємо код. using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace MyLib { ///Обчислення математичних фунцій public class MySin { /// /// Sin(x) /// /// кут в радіанах – перший аргумент функції Sin ///показник ступеня – другий аргумент функції Sin /// Повертає значення функції Sin для заданого кута public static double Sin(double x, int n) { double result = 0; for (int i = 0; i < n; i++) { result = result + (Math.Pow((-1), i) * Math.Pow(x, (2 * i + 1))) / F(2 * i + 1); } return result; } static double F(int n) { double tmp = 1; for (int i = 1; i <= n; i++) { tmp = tmp * i; } return tmp; } } } Побудуємо Рішення, що містить проект, для чого в Головному меню виберемо пункт Build|Build Solution. В результаті успішної компіляції буде побудований файл з уточненням dll. Оскільки побудована збірка не містить виконуваного файлу, то безпосередньо запустити наш проект на виконання не удасться. Побудуємо консольний проект, до якого приєднаємо нашу DLL, і протестуємо, наскільки коректно працюють створені нами методи. 2. Створення консольного проекту для тестування функції з бібліотеки. Виберемо пункт меню File|New|Project, задамо тип проекту ConsoleApplication, дамо йому ім'я – ConsoleMySin, вкажемо, що проект додається до існуючого Рішення Lab5. В результаті у вже існуюче Рішення додасться ще один проект. Напишемо код, який викликає функцію Sin(x,n), яку ми реалізували, стандартну функцію Sin(x), обчислює похибку і виводить результат на консоль. using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleMySin { class Program { /// /// Виклик бібліотечного метода Sin(x,n) з MySin.dll /// /// static void Main(string[] args) { Console.WriteLine("Введите x- угол в радианах"); double x = double.Parse(Console.ReadLine()); Console.WriteLine("Введите показатель степени n"); int n = int.Parse(Console.ReadLine()); //вызов метода вычисления sin(x) из библиотеки double my_sinus = MyLib.MySin.Sin(x, n); //вызов метода из класса Math double sinus = Math.Sin(x); double delta = sinus - my_sinus; Console.WriteLine("my_sinus= {0},sin={1},delta={2}", my_sinus, sinus, delta); Console.ReadKey(); } } } Побудуємо рішення і отримаємо повідомлення про помилку. Наша бібліотека не підключена до проекту. 3. Підключення проекту бібліотеки до консольного проекту. Для цього додамо посилання на проект з DLL MySin. У вікні Solution Explorer наведемо покажчик миші до імені консольного проекту і з контекстного меню виберемо пункт меню Add Reference. Виберемо вкладку Projects. Оскільки проект MySin включений в Рішення, то він автоматично з'явиться у вікні, Якщо посилання потрібно встановити на проект, не включений в Рішення, то у вікні додавання посилань потрібно вказати шлях до проекту. Посилання на DLL з'явиться в папці References консольного проекту. Тепер проекти зв'язані і з консольного проекту доступні сервіси, DLL, що надаються. Перебудуємо рішення, щоб не було помилок. 4. Встановлення стартового проекту. У вікні Solution Explorer наведемо курсор миші на заголовок консольного проекту і виберемо: Set as StartUp Project Після цього його можна запустити на виконання. 5. Створення Windows-проекту в тому самому рішенні. Виберемо пункт меню File|New|Project, задамо тип проекту Windows Forms Application, дамо йому ім'я – WindowsMySin, вкажемо, що проект додається до існуючого Рішення Lab5. На формі створимо 2 текстові поля для введення вхідних параметрів, третє і четверте – для результатів. Додамо 2 кнопки. При натисканні кнопки "Обчислення Sin" виконується виклик функцій, "Вихід" – завершення роботи. Код форми: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace WindowsMySin { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { double x = double.Parse(txt_x.Text); int n = int.Parse(txt_n.Text); //вызов метода вычисления sin(x) из библиотеки double my_sinus = MyLib.MySin.Sin(x, n); //вызов метода из класса Math double sinus = Math.Sin(x); txt_y1.Text = my_sinus.ToString(); txt_y2.Text = sinus.ToString(); } private void button2_Click(object sender, EventArgs e) { this.Close(); } } } 6. Робимо проект стартовим і запускаємо на виконання. Результат: 7. Створення DLL-бібліотеки як окремого рішення (в іншому процесі) Основна мета створення і використання DLL-бібліотек – забезпечення повторного використання коду. Тому в реальних системах різні компоненти можуть викликати однакові бібліотечні методи. Для цього DLL-бібліотека повинна знаходитися в окремому рішенні. Для підключення бібліотеки до проекту файл зі збіркою, що містить бібліотеку потрібно підключити з меню Add Reference. Оскільки проект не включений в Рішення, то у вікні додавання посилань потрібно вказати шлях до проекту у файловій системі. Лабораторна робота №6. Застосування DLL-бібліотек Мета роботи Розробка Windows-проекту з включенням блоків динамічної бібліотеки, перевірка кросплатформності. Порядок виконання лабораторної роботи На основі попередньо створених DLL - бібліотеки розробити Windows-проект для обчислення значення поліному на тому ж самому ПК й у тому ж середовищі, що була розроблена бібліотека Знайти можливість встановити розроблений студентом файл *.dll в іншому операційному середовищі. Перевірити роботоздатність бібліотеки в іншій операційній системі. 3.Сформувати звіт, що містить. Вступну частину Блок коду Windows-проекту для обчислення поліному вашого варіанту з застосуванням функцій бібліотеки. Опис процедури побудови рішення Результати роботи Windows-проекту (копії екрану) Характеристики іншого операційного середовища, на яке переноситься бібліотека для перевірки її кросплатформності Опис процесу переносу DLL-бібліотеки й результати перевірки її роботоздатності. Висновки. Варіанти для розробки бібліотек DLL № вар. Зміст завдання 1 Створити DLL-бібліотеку, яка містить математичні методи для обчислення значення поліному p=a/x^3+(b/x)^3+c*sin(x)/d. Значення a,b,c,d,х – десяткові числа. Протестувати роботу бібліотечних методів. 2 Створити DLL-бібліотеку, яка містить математичні методи для обчислення значення поліному z=a*x^3 - b*x-int(c/x)^3-d/int(x). Значення a,b,c,d,х – десяткові числа. Протестувати роботу бібліотечних методів. 3 Створити DLL-бібліотеку, яка містить математичні методи для обчислення значення поліному f=2*int(x^3)+30,2*(x+cos(x))^3+8,3. Значення х – десяткові числа. Протестувати роботу бібліотечних методів. 4 Створити DLL-бібліотеку, яка містить математичні методи для обчислення значення поліному g=(a*int(-x)-b/x)^2+d*x^2+c. Значення a,b,c,d,х – десяткові числа. Протестувати роботу бібліотечних методів. 5 Створити DLL-бібліотеку, яка містить математичні методи для обчислення значення функції z=a*x^2-b*int(х)^2+exp(x*y). Значення a,b,c,d,х,y – десяткові числа. Протестувати роботу бібліотечних методів. 6 Створити DLL-бібліотеку, яка містить математичні методи для обчислення значення функції f= -a*x^2+d*c*y+ ln(b*y^2) Значення a,b,c,d,х,у – десяткові числа, значення y та х <0. Протестувати роботу бібліотечних методів. 7 Створити DLL-бібліотеку, яка містить математичні методи для обчислення значення функції z=а*cos(x)^2 - в*x*y+ с* y^2 при цілих значеннях параметрів і змінних. Протестувати роботу бібліотечних методів. 8 Створити DLL-бібліотеку, яка містить математичні методи для обчислення значення функції y=2*(int(x/2,4)^3-int(x^3)+int(4,5/x). Значення х – десяткові числа. Протестувати роботу бібліотечних методів. 9 Створити DLL-бібліотеку, яка містить математичні методи для обчислення значення поліному p=(a*x+b*x)^2-c*sin(x^3)+d. Значення a,b,c,d,х – десяткові числа. Протестувати роботу бібліотечних методів. 10 Створити DLL-бібліотеку, яка містить математичні методи для обчислення значення поліному g=(а/x+в*x)^3+с*abs(x^3)/d. Значення a,b,c,d,х – десяткові числа, у- ціле. Протестувати роботу бібліотечних методів. 11 Створити DLL-бібліотеку, яка містить математичні методи для обчислення значення поліному p=(а*x+в*sin(x))^3-a*sin(x^3). Значення a,b,х – десяткові числа, у- ціле. Протестувати роботу бібліотечних методів. 12 Створити DLL-бібліотеку, яка містить математичні методи для обчислення значення функції z=a*int(x)^3 – d/x*y- b* y^3 при будь-яких значеннях параметрів і змінних. Протестувати роботу бібліотечних методів. 13 Створити DLL-бібліотеку, яка містить математичні методи для обчислення значення поліному у=(а*x+с*x)^2 /b*cos(x^2)+d. Значення a,b,c,d,х,у – десяткові числа. Протестувати роботу бібліотечних методів. 14 Створити DLL-бібліотеку, яка містить математичні методи для обчислення значення поліному f=a*x+b*y^2-c*sin(x^4)+d. Значення a,b,c,d,х,у – негативні десяткові числа. Протестувати роботу бібліотечних методів. 15 Створити DLL-бібліотеку, яка містить математичні методи для обчислення значення поліному z=a*x^2 + b*x + c/x+abs(x/d). Значення a,b,c,d,х – десяткові числа. Протестувати роботу бібліотечних методів. 16 Створити DLL-бібліотеку, яка містить математичні методи для обчислення значення поліному y=(cos(x) +sin(x))^3 + sin(x)/cos(x) Значення х – негативні числа. Протестувати роботу бібліотечних методів. 17 Створити DLL-бібліотеку, яка містить математичні методи для обчислення значення функції p=(a*x-b*y)^2+2*sin(x)+c*d. Значення a,b,c,d,х– десяткові числа. Протестувати роботу бібліотечних методів. 18 Створити DLL-бібліотеку, яка містить математичні методи для обчислення значення функції y=a/x^3 + b/x^3 + c/(x*abs(x)) Значення a,b,c,х – негативні десяткові числа. Протестувати роботу бібліотечних методів. 19 Створити DLL-бібліотеку, яка містить математичні методи для обчислення значення функції z=a*x^2 - b*y^2 + cos(x*y) при будь-яких значеннях параметрів і змінних. Протестувати роботу бібліотечних методів. 20 Створити DLL-б біліотеку, яка містить математичні методи для обчислення значення функції y=a*x^2+ b*x^4-a*b*abs(x). Значення a,b,x– негативні десяткові числа. Протестувати роботу бібліотечних методів. 21 Створити DLL-бібліотеку, яка містить математичні методи для обчислення значення функції z=(a*x^2-b*y^2)^2-cos(x)/c-d. Значення a,b,c,d,x,y– негативні десяткові числа. Протестувати роботу бібліотечних методів. 22 Створити DLL-бібліотеку, яка містить математичні методи для обчислення значення функції y=(a-x)^3 + (b-sin(x))^3 + c*x. Значення a,b,c,x– негативні десяткові числа. Протестувати роботу бібліотечних методів. 23 Створити DLL-бібліотеку, яка містить математичні методи для обчислення значення функції p=a*x^3 – cos(b*x) ^3 + c*cos(x)+d. Значення a,b,c,d,x– негативні десяткові числа. Протестувати роботу бібліотечних методів. 24 Створити DLL-бібліотеку, яка містить математичні методи для обчислення коренів квадратного рівняння, що задане формулою a*x^2+b*x+c=0. Значення a,b,x– десяткові числа. Протестувати роботу бібліотечних методів. Теоретичні відомості та вказівки до виконання. Створити на диску папку з шифром групи, а в ній папку Lab5. В цій папці розмістити створені рішення. 1. Приклад Створення DLL-бібліотеки Запустимо Visual Studio 2008, із стартової сторінки перейдемо до створення проекту, виберемо тип проекту Class Library (Бібліотека класів) . У вікні створення DLL всі поля заповнені значеннями за замовчанням. Як правило, їх слід перевизначити, задаючи власну інформацію. У полі Name задати ім'я DLL – MyLib. У полі Location вказується шлях до каталогу, де зберігатиметься Рішення, що містить проект. Розмістіть рішення в папці Lab5 У полі Solution виберіть елемент Create New Solution, що створює нове Рішення (Альтернативою є елемент списку, що вказує, що проект може бути доданий до існуючого Рішення). У вікні Solution Name задати ім'я Рішення. Вибрати Lab5. Зверніть увагу на інші установки, зроблені в цьому вікні, - включений прапорець (за замовчанням) Create directory for solution, у верхньому віконці із списку можливих каркасів вибраний каркас Framework .Net. Задавши необхідні установки і клацнувши по кнопці OK, отримаємо автоматично побудовану заготівку проекту DLL, відкриту в середовищі Visual Studio 2008 . Імена класів повинні бути змістовними. Змінимо ім'я Class1 на ім'я MySin. Для цього у вікні коду проекту виділимо ім'я змінної об'єкту, потім в головному меню виберемо пункт Refactor (Оптимізація коду) і підпункт Rename (Перейменування). У вікні, що відкрилося, вкажемо нове ім'я. Тоді будуть показані всі місця, що вимагають перейменування об'єкту. В даному випадку буде лише одна очевидна заміна, але в загальному випадку замін багато, так що автоматична заміна всіх входжень корисна. Правило стилю: ім'я класу і ім'я файлу, що зберігає клас, повинні збігатися. Перейменування імені файлу робиться безпосередньо у вікні проектів Solution Explorer. Правило стилю: додавання коментаря. Для цього в рядку перед заголовком класу слід набрати три слеша (три косі риски). В результаті перед заголовком класу з'явиться заголовний коментар – тег summary, в який і слід додати короткий, але змістовний опис призначення класу. Теги summary, якими слід супроводжувати класи, відкриті (public) методи і поля класу відіграють три важливі ролі. Вони полегшують розробку і супровід проекту, роблячи його самодокументованим. Клієнти класу при створенні об'єктів класу отримують інтелектуальну підказку, що пояснює суть того, що можна робити з об'єктами. Спеціальний інструментарій дозволяє побудувати документацію за проектом, що включає інформацію з тегів summary. У нашому прикладі коментар до класу MySin може бути достатньо простим – Обчислення математичних функцій . Напишемо реалізацію одного методу класу – обчислення функції Sin(x) через ряд Тейлора. Спочатку напишемо коментарі до методу (у форматі XML). Далі напишемо реалізацію методу. Отримаємо код. using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace MyLib { ///Обчислення математичних фунцій public class MySin { /// /// Sin(x) /// /// кут в радіанах – перший аргумент функції Sin ///показник ступеня – другий аргумент функції Sin /// Повертає значення функції Sin для заданого кута public static double Sin(double x, int n) { double result = 0; for (int i = 0; i < n; i++) { result = result + (Math.Pow((-1), i) * Math.Pow(x, (2 * i + 1))) / F(2 * i + 1); } return result; } static double F(int n) { double tmp = 1; for (int i = 1; i <= n; i++) { tmp = tmp * i; } return tmp; } } } Побудуємо Рішення, що містить проект, для чого в Головному меню виберемо пункт Build|Build Solution. В результаті успішної компіляції буде побудований файл з уточненням dll. Оскільки побудована збірка не містить виконуваного файлу, то безпосередньо запустити наш проект на виконання не удасться. Побудуємо консольний проект, до якого приєднаємо нашу DLL, і протестуємо, наскільки коректно працюють створені нами методи. 2. Створення консольного проекту для тестування функції з бібліотеки. Виберемо пункт меню File|New|Project, задамо тип проекту ConsoleApplication, дамо йому ім'я – ConsoleMySin, вкажемо, що проект додається до існуючого Рішення Lab5. В результаті у вже існуюче Рішення додасться ще один проект. Напишемо код, який викликає функцію Sin(x,n), яку ми реалізували, стандартну функцію Sin(x), обчислює похибку і виводить результат на консоль. using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleMySin { class Program { /// /// Виклик бібліотечного метода Sin(x,n) з MySin.dll /// /// static void Main(string[] args) { Console.WriteLine("Введите x- угол в радианах"); double x = double.Parse(Console.ReadLine()); Console.WriteLine("Введите показатель степени n"); int n = int.Parse(Console.ReadLine()); //вызов метода вычисления sin(x) из библиотеки double my_sinus = MyLib.MySin.Sin(x, n); //вызов метода из класса Math double sinus = Math.Sin(x); double delta = sinus - my_sinus; Console.WriteLine("my_sinus= {0},sin={1},delta={2}", my_sinus, sinus, delta); Console.ReadKey(); } } } Побудуємо рішення і отримаємо повідомлення про помилку. Наша бібліотека не підключена до проекту. 3. Підключення проекту бібліотеки до консольного проекту. Для цього додамо посилання на проект з DLL MySin. У вікні Solution Explorer наведемо покажчик миші до імені консольного проекту і з контекстного меню виберемо пункт меню Add Reference. Виберемо вкладку Projects. Оскільки проект MySin включений в Рішення, то він автоматично з'явиться у вікні, Якщо посилання потрібно встановити на проект, не включений в Рішення, то у вікні додавання посилань потрібно вказати шлях до проекту. Посилання на DLL з'явиться в папці References консольного проекту. Тепер проекти зв'язані і з консольного проекту доступні сервіси, DLL, що надаються. Перебудуємо рішення, щоб не було помилок. 4. Встановлення стартового проекту. У вікні Solution Explorer наведемо курсор миші на заголовок консольного проекту і виберемо: Set as StartUp Project Після цього його можна запустити на виконання. 5. Створення Windows-проекту в тому самому рішенні. Виберемо пункт меню File|New|Project, задамо тип проекту Windows Forms Application, дамо йому ім'я – WindowsMySin, вкажемо, що проект додається до існуючого Рішення Lab5. На формі створимо 2 текстові поля для введення вхідних параметрів, третє і четверте – для результатів. Додамо 2 кнопки. При натисканні кнопки "Обчислення Sin" виконується виклик функцій, "Вихід" – завершення роботи. Код форми: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace WindowsMySin { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { double x = double.Parse(txt_x.Text); int n = int.Parse(txt_n.Text); //вызов метода вычисления sin(x) из библиотеки double my_sinus = MyLib.MySin.Sin(x, n); //вызов метода из класса Math double sinus = Math.Sin(x); txt_y1.Text = my_sinus.ToString(); txt_y2.Text = sinus.ToString(); } private void button2_Click(object sender, EventArgs e) { this.Close(); } } } 6. Робимо проект стартовим і запускаємо на виконання. Результат: 7. Створення DLL-бібліотеки як окремого рішення (в іншому процесі) Основна мета створення і використання DLL-бібліотек – забезпечення повторного використання коду. Тому в реальних системах різні компоненти можуть викликати однакові бібліотечні методи. Для цього DLL-бібліотека повинна знаходитися в окремому рішенні. Для підключення бібліотеки до проекту файл зі збіркою, що містить бібліотеку потрібно підключити з меню Add Reference. Оскільки проект не включений в Рішення, то у вікні додавання посилань потрібно вказати шлях до проекту у файловій системі. Лабораторна робота №7. Створення багатофайлової збірки Мета роботи Освоїти роботу з Компілятором командного рядка csc й процедуру створення багатофайлової збірки. Порядок виконання лабораторної роботи Створити визначення для классу InfoOP таке, що формує інформацію на тему Перелік операцій, необхідних для обчислення поліному Скомпілювати клас InfoOP в .NET-модуль. Отримати файл InfoOP.netmodule. Створити другий клас Polinom, в який помістити рядок із загальним виглядом поліному Вашого варіанту Скомпілювати Polinom.cs з використанням відповідних опцій, так, щоб включити інформацію про двійковий файл InfoOP.netmodule в маніфест збірки. Отримати файл Polinom.dll – головний файл проекту. Визвати утиліту Іldasm.exe, отримати й проаналізувати файли маніфесту для InfoOP.netmodule й Polinom.dll. Побудувати клієнтський додаток ClientFIO з метою отримання інформації про вид поліному й переліку операцій, необхідних для його обчислення. 7.Сформувати звіт, що містить. Вступну частину Блок коду InfoOP.netmodule Блок коду Polinom.dll Блок коду ClientFIO Опис процедур компоновки Манифести InfoOP.netmodule и Polinom.dll з поясненням Результати роботи проекту (копії екрану) Висновки. Теоретичні відомості Многофайловая сборка- это коллекция взаимосвязанных модулей, которые развертываются в виде цельной логической единицы. В IDE-среде Visual Studio шаблона проекта для создания многофайловой сборки на С# не предусмотрено. Поэтому используется компилятор командной строки (csc.exe). Задача: создать многофайловую сборку по имени Car. В главном модуле этой сборки (car.dll) должен содержаться единственный тип класса SportCar и соответствующий манифест, который указывает на наличие дополнительного файла *.netmodule по имени auto.netmodule, содержащего еще один класс Auto. Каждый класс должен размещаться в отдельном двоичном файле, а пространство имен у них будет одно — Car. Оба класса создать на С# Порядок создания многофайловой сборки приведен ниже. С помощью любого простого текстового редактора создадим определение для класса Auto и сохраним его в файле с именем auto.cs: using System; namespace Car { public class Auto { public void AutoInfo() { Console.WriteLine("Информация об автомобиле: "); } } } Скомпилируем этот класс в .NET-модуль. Для этого откройте в Visual Studio 2010 окно командной строки, перейдите в папку, где был сохранен файл auto.cs, и введите следующую команду (опция module флага /t указывает, что должен быть создан файл *.netmodule, а не *.dll или *.ехе): csc.exe /t:module auto.cs В папке с файлом auto.cs появится новый файл по имени auto.netmodule. Создадим новый файл sportcar.cs со следующим определением класса: using System; namespace Car { public class SportCar { public void InfoSportCar() { Console.WriteLine("Audi R8"); } } } Скомпилируем sportcar.cs так, чтобы главный модуль в этой многофайловой сборке назывался car.dll. Кроме того, он должен включать информацию о двоичном файле auto.netmodule. Выбираем соответствующие опции /t: library и /out:. Чтобы включить информацию о двоичном файле auto.netmodule в манифест сборки, также потребуется добавить соответствующий флаг /addmodule. Полностью необходимая команда выглядит следующим образом: csc /t:library /addmodule:auto.netmodule /out:car.dll sportcar.cs После выполнения этой команды в каталоге должен появиться главный модуль car.dll, а также второстепенный двоичный файл auto.netmodule. Анализ манифеста. Откроем файл auto.netmodule в утилите c:\program Files\Microsoft SDKs\Windows\v6.0A\bin\ildasm.exe (возможно, путь на вашем ПК будет иной). Сразу же можно будет заметить, что в нем содержитсяманифест уровня модуля, единственной задачей которого является перечисление всех внешних сборок, которые упоминаются в кодовой базе. Поскольку в классе Auto был практически добавлен только вызов Console.WriteLine(), обнаружится следующая ключевая информация: Далее откроем в ildasm.exe файл главного модуля car.dll и изучим содержимое манифеста уровня всей сборки. В нем важно обратить внимание, что маркер .file используется для представления информации о других ассоциируемых с многофайловой сборкой модулях (в данном случае — auto.netmodule), а маркеры .class extern — для перечисления имен внешних типов, которые упоминаются как используемые во второстепенном модуле (в данном случае — Auto). Ниже приведена соответствующая информация: 6. Использование многофайловой сборки 6.1.Построим новое клиентское приложение на языке С# в командной строке для вызова многофайловой сборки. Для начала создадим новый файл по имени Client.cs со следующим определением модуля и сохраним его в месте, где находится многофайловая сборка: using System; using Car; class Program { static void Main() { SportCar obj = new SportCar(); obj.InfoSportCar(); // Здесь будет загружаться модуль auto.netmodule Auto obj1 = new Auto(); obj1.AutoInfo(); Console.ReadLine(); } } 6.2.Чтобы скомпилировать эту исполняемую сборку в командной строке, запустим компилятор csc.ехе с помощью следующей команды: csc /r:car.dll Client.cs При добавлении ссылки на многофайловую сборку компилятору необходимо указать только имя главного модуля (второстепенные модули *.netmodule будут загружаться CLR-средой по требованию, когда возникнет необходимость в их использовании клиентским кодом). Сами по себе модули *.netmodule не обладают никаким индивидуальным номером версии и потому не могут напрямую загружаться CLR-средой. Отдельные модули *.netmodule могут загружаться только главным модулем (например, файлом, в котором содержится манифест сборки). После запуска исполняемого файла получаем: Лабораторна робота №8 Здобуття навичок візуальної роботи з базами даних в VS з застосуванням технології ADO .Net Мета роботи: Здобуття навичок створення баз даних MS SQL Sеrver в середовищі VS, відображення даних. Зміст роботи: Отримати теоретичні знання й створити базу даних SQL Server в середовищі VS, що включає декілька поєднаних таблиць. Заповнити таблиці тестовими даними (3-5 записів) та відобразити їх на екрані (Свойства-Показать данные). Створити Windows-застосунок, на якому розмістити список ListBox та компонент DataGridView. Замінити назви декількох стовпчиків для Grid Продемонструвати працездатність розробки, для чого вивести список ListBox та відобразити на формі дані однієї з таблиць за допомогою компонента DataGridView. Сформувати звіт, що містить. Вступну частину Теоретичні відомості про технологію ADO .Net та створення баз даних MS SQL Sеrver в середовищі Visual Studio. Структуру обраної бази даних, назви полів, їх властивості, ознаки ключового поля, первинного чи вторинного ключа. Копії екранів з таблицями, що заповнені тестовими даними. Загальний вигляд Windows-форми з розміщеними на ньому списком ListBox та компонентом DataGridView, у яких відображені дані таблиць бази даних. Зробити Висновки по роботі. Література 1.Кросплатформне програмування: конспект лекцій // Укладач Коротун Т.М. - К. : МНТУ.– 2011 2.http://msdn.microsoft.com/ru-ru/library/bb546200(v=vs.90).aspx - Пошаговое руководство. Создание базы данных SQL Server Compact 3.5 3. Культин Н.Б. Microsoft Visual C# в задачах и примерах. – СПб.: БХВ-Петербург, 2009. -320 с. 4. Уотсон К., Нейгел К, и др. "Visual C# 2008. Базовый курс", Wiley Publishing, 2009. - 1211с