Материал: Розробка програмного забезпечення для реєстрації волонтерів на події

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

При створенні елементів управління і обробників подій Visual Studio.Net генерує велику частину коду, яка відноситься до GUI. Програмісти можуть використовувати Visual Studio.Net для виконання великої частини подібних задач графічно, шляхом «перетягування і скидання »(drag and drop) компонентів на форму і завдання властивостей у вікні Properties.

Програма з використанням багатодокументного інтерфейсу (multiple document interface, MDI), представляють користувачу можливість одночасного редагування декількох документів. Вікно додатку багатодокументної програми (MDI) називається батьківським, а всі вікна в додатку - вікнами - наслідниками. Незважаючи на те, що багатодокументний додаток може мати багато вікон-наслідників, кожне із них має тільки одне батьківське вікно. Більше того, активним в кожний конкретний момент часу може бути тільки одне вікно-наслідник. Останні не можуть бути «предками», і їх не можна перемістити за межі батьківського вікна.

Для створення багатодокументної форми добавляємо нову форму (Form) і присвоїмо їй властивість IsMDIContainer значення True. Після цього створюється клас форми-наслідника для добавлення в основну форму. Для цього потрібно клацнути правою кнопкою миші на проекті у вікні Solution Explorer, вибрати команду ADD Windows Form і присвоїти файлу ім’я. Для добавлення в батьківську форму «наслідника» необхідно створити об’єкт нової форми наслідника; встановити її властивість MdiParent в батьківську форму і викликати метод Show. Код для створення наслідника звичайно знаходиться всередині обробника подій, яке створює нове вікно у відповідь на дію користувача. Вибір меню (наприклад, File, в якому вибирається команда New, за якою слідує команда Window)- загальний метод створення нових вікон-наслідників. Властивість MdiChildren форми представляє собою масив посилань на Form-наслідника. Це корисно, якщо батьківське вікно захоче перевірити властивість всіх свої «нащадків». Властивість ActiveMdiChildren повертає посилання на активне вікно-наслідника; воно повертає null, якщо активних вікон-наслідників немає.

Властивості і події MDI-форми

Опис, делегат і аргументи подій

Загальні властивості MDI-наслідника


IsMdiChild

Вказує на те, чи є форма MDI-наслідником. При значенні True, форма - MDI-наслідник (властивість тільки для читання)

MdiParent

Задає MDI форму - наслідника.

Загальні властивості MDI-нащадка


ActiveMdiChild

Викликає об’єкт Form, який являється поточним активним MDI-наслідником.

IsMdiContainer

Вказує на те, чи може форма бути багатодокументною. При значенні True форма може бути багатодокументною батьківською формою. Значення по замовчуванню- False.

MdiChildren

Повертає MDI-наслідників у вигляді масиву форм.

Загальний доступ


LayoutMdi

Визначає відображення форм-потомків на багатодокументній батьківській формі. В якості параметра приймає перечислення MdiLayout з можливими значеннями ArrangeIcons (упорядкувати значки), Cascade(каскадом), TileHorizontal(впорядкувати по горизонталі), TileVertical (впорядкувати по вертикалі)

Загальні події

(Делегат EventHandler, аргументи події EventArgs)

MdiChildActivate

Генерується при закритті чи активації MDI-наслідника

.2 Опис використаних елементів управління


В даній програмі використані такі елементи управління: TextBox, Label, DataGridView, Button, menuStrip, toolStrip.

Мітки представляють текстові інструкції чи інформацію до програми. Мітки визначаються класом Label, який є похідним від класу Control. Label відображає текст, який користувач не може редагувати. Після створення міток програми дуже рідко змінюється їх зміст.

Загальні властивості Label

Опис, делегат і аргументи події

Font

Гарнітура тексту

Текст мітки

TextAlign

Вирівнювання тексту на елементі управління. Одне із трьох положень по горизонталі(left, center або right)і одне із трьох положень по вертикалі(top,middle або bottom)


Текстове поле(клас TextBox) - це область, в яку текст може вводитись користувачем з клавіатури, або просто відображатись. Текстове поле із паролем - це область, в яку всі введені користувачем дані приховані. По мірі вводу всі символи в такому текстовому полі відображаються у вигляді особливих символів(зазвичай *).

Зміною властивості PasswordChar текстового поля останньому задається пароль; при якому вказується символ, який буде відображати вміст. Видалення значення PasswordChar із вікна Properties повертає текстове поле у звичайний режим.

Властивості і події класу TextBox

Опис, делегат і аргументи події

Загальні властивості


AcceptsReturn

При значенні true і натисканні клавіші <Enter> створюється новий стрічка, якщо текстове поле містить багато стрічок. При значенні false і натисканні клавіші <Enter> натискається кнопка форми по замовчуванню.

Multiline

При значенні true текстове поле може відображати багато стрічок. По замовчуванню-false.

Властивості і події класу TextBox


PasswordChar

Введений текст відображається у вигляді символів, що робить TextBox текстовим полем з паролем доступу. Якщо символ не вказаний, тоді TextBox відображає введений текст.

ReadOnly

Якщо true, то текстове поле має сірий фон, і текст редагувати не можна. По замовчуванню - false.

ScrollBars

Для багатострічкових текстових полів; вказує на появу полоски прокрутки(none, horizontal, vertical або both)

Text

Текст, який відображається в текстовому полі.

Загальні події


TextChanged

Викликається при зміні тексту в TextBox(користувач добавив або видалив символи). Створюється по замовчуванню при подвійному клацанні миші на даному елементі управління в режимі проектування.


Кнопка-це елемент управління, на якому користувач клацає кнопкою миші для запуску виконання тої чи іншої операції. В програмі можуть використовуватись декілька видів кнопок, таких як кнопки позиції списку(прапорці) і селективні кнопки(переключателі). Всі типи кнопок являються похідними від базового класу ButtonBase (простір імен System.Windows.Forms), який визначає загальні властивості кнопок. Будемо розглядати клас Button, який часто використовуємо для подачі команди. Текст на зовнішній поверхні Button називається міткою кнопки.

Властивості і події класу Button

Опис, делегат і аргументи події

 

Загальні властивості


 

Text

Текст, який відображається на зовнішній поверхні Button.

 

Загальні події


Click

Викликається при подвійному клацанні миші на елементі управління. Створюється по замовчуванню при подвійному клацанні на даному елементі управління в режимі проектування.


Управління DataGridView надає потужний і гнучкий спосіб для відображення даних у табличному форматі. Ми можемо використовувати DataGridView щоб показати тільки для читання вигляд невеликої кількості даних, або можна масштабувати його щоб показати редагований вигляд дуже великих наборів даних. Ми можемо розширювати управління DataGridView різними шляхами, і можемо визначати поведінку у застосунку. Наприклад, ми можемо задавати програмно власні алгоритми сортування, і можемо створювати власні типи колонок. Як відомо, перш ніж почати прискорено і красиво відображати дані, їх потрібно отримати. DataGridView підтримує три режими роботи з даними:

. Перший, основний - відображення даних із зовнішньої колекції(наприклад, ListView,DataTable).

. Спеціальний режим відображення вільних (unbound) даних, тобто дані зберігаються в самому control-e.

. Ще один особливий режим роботи-віртуальний(Virtual mode). В ньому control (генерує) подію при надходженні якої прикладний код повертає деякі дані. Так як дані при цьому не повинні де-небудь зберігатися, віртуальний режим може оперувати мільйонами стрічок без яких-небудь проблем з відтворенням чи нестачею пам’яті. Прив’язувати елементи користувацького інтерфейсу можна аж ніяк не виключно до таблично представлених даних. Практично будь-яка структура даних може виступати в ролі їх джерела- звичайні об’єкти, масиви, колекції і т.д. Одною із особливостей DataGridView є наявність великої кількості класів-друзів. Таким чином, control має розширену архітектуру, де значну частину функціональності, доступної користувачу, забезпечують сторонні класи-друзі(класи-плагіни).

На малюнку зображене розширене дерево класів-плагінів.


Добавлення колонок - крок, абсолютно необхідний перед тим, як control буде представлений користувачу. Якщо ми не добавили жодної з колонок, DataGridView буде представляти собою сірий прямокутник на формі, зовсім позбавлений якої-небудь функціональності. Автори control-a передбачити ряд способів добавлення колонок. В загальному випадку ми зустрічаємось з такими чотирма можливими способами:

Є джерело даних, воно доступне під час розробки, і ми готові добавляти колонки в цей час.

Немає джерела даних, але під час розробки ми знаємо склад і тип колонок, і готові добавляти їх.

Є джерело даних, але воно доступне тільки під час виконання програми, а під час розробки нічого не відомо ні про нього, ні про склад колонок.

Немає джерела даних, а склад/тип колонок визначається динамічно, під час виконання, а під час розробки невідомий тип і, можливо, навіть кількість колонок.

Всі інші варіанти приводять до комбінації цих чотирьох базисних сценаріїв.

Простір імен System.Windows.Forms містить типи для організації спадаючих головних меню (розташованих у верхній частині форми) і контекстних меню, що відкриваються по клацанню правої кнопки миші.

Елемент ToolStrip є контейнером для створення структур меню, панелей інструментів і рядків станів.

Елемент управління MenuStrip - це контейнер для структур меню на формі. Цей елемент успадковується від ToolStrip. Система меню будується додаванням об'єктів ToolStripMenu до MenuStrip.

Клас ToolStripMenuItem служить для побудови структур меню. Кожний об'єкт ToolStripMenuItem представляє окремий пункт в системі меню.

Для створення меню потрібно перетягнути елемент MenuStrip на форму. Він розміщується в невидимій частині форми.

Елемент MenuStrip дозволяє вводити текст меню безпосередньо в елементи меню.



.3 Реалізація графічних елементів програми


В даній програмі використовуються перелічені вище елементи управління.

Програма містить три DataGridView, які відповідно знаходяться у класах VolunteersList, HappeningsList та Assignment. Вони мають такий вигляд:

Форма відображає реєстрацію волонтерів.


Дана форма відображає реєстрацію подій.

Дана форма відображає реєстрацію волонтера на подію.

На формах ми також бачимо кнопки (Button).


Дана форма здійснює реєстрацію волонтера на подію за допомогою коду події та номера волонтера.

На формі ми бачимо використані елементи управління: TextBox, Label і Button.

На головній формі ми бачимо командну стрічку, яка містить меню. Реалізовано елемент menuStrip.

На наступному рисунку ми бачимо використання елемента toolStrip.


3. Збереження даних


Таблиця створюється за допомогою класу DataTable. Щоб використовувати DataTable потрібно підключити System.Data.

Об’єкт DataTable містить дві конструкції:

public DataTable()DataTable(string tableName)

В наступному прикладі створюється об’єкт DataTable і встановлюється його ім’я.

DataTable TabVolunteer = new DataTable(“DGVolunteer”);

DataTable містить сукупність об’єктів DataColumn. Ця сукупність визначає структуру таблиці. Щоб добавити новий стовпець в цю сукупність, використовується метод Add().

DataColumn cName = new DataColumn("Ім'я");

TabVolunteer.Columns.Add("Ім'я", typeof(string));

В даному прикладі спочатку створюється змінна типу DataColumn з ім’ям «cName».

Дана програма містить дві таблиці, які зберігають дані про волонтерів і події. Таблиці створюються аналогічно до вищенаведених прикладів.

3.2 Колекції. Додавання до колекції елементів і доступ до елементів колекції

Класи структур даних називаються колекціями класів. В них зберігаються колекції даних. Кожний об’єкт одного із цих класів називається колекцією, яка представляє набір елементів.

З допомогою колекції класів замість створення структур даних програміст просто використовує існуючі структури даних, не задумуючись про їхню реалізацію. Дана методологія представляє яскравий приклад повторного використання коду.

В більшості мов програмування звичайні масиви мають фіксований розмір:їх неможна змінювати динамічно відповідно вимогам часу і необхідній пам’яті програмному додатку. В деяких додатках обмеженість розміру представляє собою досить серйозну проблему для розробників. Колекція класу ArrayList.Net Framework відтворює функціональність традиційних масивів і забезпечує динамічні зміни розміру колекції за допомогою методів класу. В будь-який момент часу колекція ArrayList містить визначене число елементів, менше або рівне ємності-кількості елементів, зарезервованих в поточний час для колекції ArrayList. Програма може маніпулювати ємністю за допомогою властивості Capacity класа ArrayList. При необхідності розширення класа ArrayList поточна ємність подвоюється по замовчуванню. Клас ArrayList зберігає посилання на object. Всі класи являються похідними від класу Object, тому клас ArrayList може містити об’єкти будь-якого типу.

Методи класу ArrayList

Add - додавання об’єкта object в клас ArrayList. Повертає значення int,яке вказує на вказівник, в який добавлений object.

Clear - видалення всіх елементів із класу ArrayList.

Contains-повернення значення true, якщо вказаний об’єкт object знаходиться в класі ArrayList; в протилежному випадку повернення значення false.

IndexOf - повернення вказівника першої появи вказаного об’єкта object в класі ArrayList.

Insert - вставка об’єкта object відповідно заданому індексу.

Remove - видалення першої появи вказаного об’єкта.

RemoveAt - видалення об’єкта по заданому індексу.

RemoveRange - видалення заданої кількості елементів, починаючи із заданого індексу в класі ArrayList.

Sort - сортування класу ArrayList.

TrimToSize - встановлення ємності (Capacity) класу ArrayList поточною кількістю елементів в класі ArrayList.

Додавання елементів до колекції здійснюється за допомогою методу Add(), як показано нижче.

List<int> intList=new List<int>();.Add(1);.Add(2);

Змінна volunteer визначена типу List<Volunteer>. З допомогою операції new створюється новий об’єкт того ж типу. Оскільки екземпляр класу List<Volunteer> створюється з конкретним класом Volunteer,тільки об’єкти цього класу можуть бути добавлені методом Add(). В наступних прикладах коду створюються і добавляються в колекцію п’ять волонтерів. Перші три добавляються з використанням ініціалізації колекції, а останні два -явним викликом метода Add().