Главная Случайная страница


Полезное:

Как сделать разговор полезным и приятным Как сделать объемную звезду своими руками Как сделать то, что делать не хочется? Как сделать погремушку Как сделать так чтобы женщины сами знакомились с вами Как сделать идею коммерческой Как сделать хорошую растяжку ног? Как сделать наш разум здоровым? Как сделать, чтобы люди обманывали меньше Вопрос 4. Как сделать так, чтобы вас уважали и ценили? Как сделать лучше себе и другим людям Как сделать свидание интересным?


Категории:

АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника






Результати виконання практичних завдань. Завдання 1. Створення проекту і батьківської MDI-форми





Завдання 1. Створення проекту і батьківської MDI-форми.

 

Зовнішній вигляд батьківської MDI-форми в режимі конструктора показано на рисунку 1. Форма містить:

· компонент menuStrip1 для реалізації головного меню;

· контейнери toolStripPanelTop, toolStripPanelLeft, toolStripPanelRight та toolStripPanelBottom для розміщення панелей інструментів;

· компонент панелі інструментів toolStripStandard;

· компонент statusStrip1 для реалізації панелі стану.

 

Рисунок 1 – Батьківська MDI-форма у режимі розробки

 

Вигляд меню Файл на початку виконання програми показано на рисунку 2. Стан активності пунктів даного меню змінюється динамічно в залежності від значень поля HasOpenedFile контролера файлів та поля loadedTestData батьківської форми. Ці поля логічного типу визначають наявність відкритого файлу і завантажених тестових даних, відповідно.

 

Рисунок 2 – Вигляд меню Файл на початку виконання програми

 

Вигляд меню Дані в режимі виконання програми показано на рисунку 3. Команда Завантажити тестові дані цього меню є активною лише у випадку, якщо немає відкритого файлу, тобто на початку виконання програми і після виклику команди закриття файлу.

 

Рисунок 3 – Вигляд меню Дані в режимі виконання програми

 

Після завантаження тестових даних стан пунктів меню Файл змінюється (рисунок 4). Це надає можливість зберегти тестові дані у файлі даних (наприклад, у двійковому форматі) для подальшого читання і редагування даних. Можна також зберегти текстове представлення графу об’єктів предметної області у текстовому файлі без можливості в подальшому створення графу об’єктів предметної області на основі вмісту такого файлу.

 

Рисунок 4 – Вигляд меню Файл після завантаження тестових даних

 

Після створення нового файлу даних або відкриття існуючого доступними стають команди збереження даних, збереження копії даних та закриття файлу, а не доступними – створення нового файлу і відкриття файлу (рисунок 5).

 

Рисунок 5 – Вигляд меню Файл у випадку наявності відкритого файлу

 

Програмний код методу визначення активності пунктів меню наведений у лістингу 1.

 

Лістинг 1 – Програмний код методу SetControlsState

private void SetControlsState() {

bool hasOpenedFile = formFileController.HasOpenedFile;

this.Text = hasOpenedFile? String.Format("{0}: {1}",

this.title, formFileController.FileName)

: this.title;

menuFileNew.Enabled =!hasOpenedFile;

menuFileOpen.Enabled =!hasOpenedFile;

menuFileClose.Enabled = hasOpenedFile;

menuFileSave.Enabled = hasOpenedFile;

menuFileSaveAs.Enabled =

hasOpenedFile || loadedTestData;

menuFileSaveCopyAs.Enabled = hasOpenedFile;

menuFileSaveAsText.Enabled =

hasOpenedFile || loadedTestData;

menuDataLoadTestData.Enabled =!hasOpenedFile;

}

 

Як видно з коду програми а також на рисунку 5, повне ім’я відкритого файлу відображується у рядку заголовку батьківського вікна разом із текстом заголовку вікна, що зберігається у полі title MDI-форми.доступне з команди

Текстове представлення завантажених даних можна переглянути на екрані за допомогою діалогового вікна, яке відкриваються за командою Дані як текст… меню Дані (рисунок 6). Вікно текстового представлення даних створюється динамічно під час виконання команди на основі форми класу CommonForms.Browsing.FTextInfo бібліотеки загальних форм (лістинг 2).

 

Рисунок 6 – Вікно перегляду текстового представлення завантажених даних

 

Лістинг 2 – Програмний код методу menuDataAsText_Click

private void menuDataAsText_Click(object sender, EventArgs e) {

textInfoDialog = new FTextInfo() {

Title = "Текстове представлення основних даних "

+ "ПО \"Поділ світу\""

};

textInfoDialog.Information = dataRepository.ToDataString();

textInfoDialog.ShowDialog();

}

 

Для роботи з даними редактору WorldDivisionFileEditor потрібне посилання на об’єкт, що успадковує абстрактний клас WorldRepository. Залежність від цього класу впроваджується через конструктор класу форми у методі Main класу Program, тобто у точці входу програми. У якості об’єкту сховища даних використовується об’єкт класу WorldFileRepository. Цей клас успадковує клас WorldRepository та інтерфейс IFileRepository. Останній визначає набір засобів для роботи з файлами, які повинен реалізовувати об’єкт файлового сховища даних. У випадках отримання нульового посилання на об’єкт класу, похідного від класу WorldRepository, або отримання посилання на об’єкт класу, який не реалізує інтерфейс IFileRepository, коструктор класу батьківської форми FWorldDivisionFileEditor генерує відповідні виключення, гарантуючи наявність усіх необхідних залежностей у випадку, якщо конструктор успішно завершив роботу (лістинг 3).

Наприкінці виконання конструктор створює об’єкт класу FormFileController, якому передає посилання на інтерфейс IFileRepository (рисунок 7) і делегує виконання команд роботи з файлами. Приклад реалізації команди роботи з файлами наведено у лістингу 4.

Метод RefreshEditingForm забезпечує поновлення стану об’єктів вікон редагування даних про сутності предметної області, які повинні бути дочірніми для батьківської форми і реалізувати інтерфейс IEditingForm (лістинг 5), що вимагає, зокрема наявності методу поновлення стану Refresh (рисунок 7).

 

Рисунок 7 – Схема класів файлового редактора даних ПО «Поділ Світу»

 


 

Лістинг 3 – Програмний код конструктора батьківської форми.

public FWorldDivisionFileEditor(WorldRepository dataRepository) {

#region Граничні оператори

if (dataRepository == null) {

throw new ArgumentNullException(

"FWorldDivisionFileEditor: dataRepository",

"Спроба створити редактор даних "

+ "ПО \"Поділ Світу\" з нульовим "

+ "посиланням на об'єкт сховища даних");

}

if (!(dataRepository is IFileRepository)) {

throw new ArgumentNullException(

"FWorldDivisionFileEditor: repository",

"Спроба створити редактор даних "

+ "ПО \"Поділ Світу\" з "

+ "посиланням на об'єкт сховища даних, "

+ "який не підтримує інтерфейс для "

+ "роботи з файлами та каталогами "

+ "IFileRepository");

}

#endregion

this.dataRepository = dataRepository;

this.fileRepository = dataRepository as IFileRepository;

formFileController = new FormFileController(

this.fileRepository);

InitializeComponent();

}

 

Лістинг 4 – Програмний код реалізації команди створення нового файлу.

private void menuFileNew_Click(object sender, EventArgs e) {

formFileController.New();

hasDataChanges = false;

loadedTestData = false;

SetControlsState();

RefreshEditingForm();

}

 

Лістинг 5 – Програмний код реалізації команди створення нового файлу.

private void RefreshEditingForm() {

foreach (Form form in this.MdiChildren) {

IEditingForm editingForm = form as IEditingForm;

if (editingForm!= null) {

editingForm.Refresh();

}

}

}

Date: 2015-09-02; view: 328; Нарушение авторских прав; Помощь в написании работы --> СЮДА...



mydocx.ru - 2015-2024 year. (0.005 sec.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав - Пожаловаться на публикацию