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


Полезное:

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


Категории:

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






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





Завдання 1. Створення проекту бібліотеки класів форм редагування даних.

 

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

У якості прикладу показано реалізація двох варіантів форми редагування даних для сутності класу CountriesMembership, яка представляє членство країни у міднародній організації (рисунок 2).

 

Рисунок 1 – Вигляд форм редагування даних для сутності класу CountriesMembership

 

Перший варіант реалізації (клас FSimpleMembershipsEditor) демонструє створення форми для вікна редагування з нуля на основі успадкування стандартного класу форми Form та інтерфейсу IEditingForm. Другий (клас FMembershipsEditor) демонструє створення похідної форми, що успадковує базову форму CommonForms.Base.EditingForm, яка, в свою чергу, успадковує клас форми CommonForms.Base.NavigationForm та інтерфейс IEditingForm. Клас NavigationForm є похідним від стандартного класу форми Form (рисунок 2).

 

Рисунок 2 – Схема класів ієрархії форм редагування даних для сутності CountriesMembership

 

На відміну від процесу створення інтекфейсу форми FSimpleMembershipsEditor, коли на порожню робочу область форми необхідно додати усі компоненти і визначити їх властивості, у процесі створення форми FMembershipsEditor достатньо лише додати компонент-контейнер класу TableLayoutPanel і розмістити в ньому компоненти редагування даних та компоненти класу Label для реалізації відповідних підписів.

 

Завдання 2. Реалізація програмного коду для відображення даних.

 

Реалізація програмного коду для форми FSimpleMembershipsEditor є досить обтяждивою задачею, оскільки цей код по суті є об’єднанням кодів форм класів NavigationForm, EditingForm та FMembershipsEditor. Код класу FMembershipsEditor забезпечує впровадження залежності від сховища даних через конструктор та реалізацію методів роботи з даними конкретної предметної області та компонентами, що призначені для їх представлення у вікні редагування (лістинг 1).

 

Лістинг 1 – Фрагмент програмного коду класу FMembershipsEditor

using CommonForms.Base;

using CommonForms.Settings;

using System;

using System.Drawing;

using System.Linq;

using System.Windows.Forms;

using WorldDivision.Data;

using WorldDivision.Domain;

 

namespace WorldDivisionForms.Editing.Derived {

 

public partial class FMembershipsEditor: EditingForm {

 

private WorldRepository dataRepository;

 

private CountriesMembership selectedEntity;

 

private CountriesMembership[] countriesMembershipsArray;

 

public FMembershipsEditor(WorldRepository dataRepository) {

if (dataRepository == null) {

throw new ArgumentNullException(

"FMembershipsEditor: dataRepository",

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

+ "членство країн у міжнародних організаціях "

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

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

}

this.dataRepository = dataRepository;

InitializeComponent();

 

SetEntitiesArray();

}

 

protected override void SetEntitiesArray() {

//EntitiesArray = dataRepository

//.CountriesMembershipsArray;

countriesMembershipsArray = dataRepository

.CountriesMembershipsArray;

EntitiesCount = countriesMembershipsArray.Length;

SetDefaultSelectedIndex();

SetSelectedEntity();

}

 

private void SetDefaultSelectedIndex() {

selectedIndex =

countriesMembershipsArray.Length == 0? -1: 0;

}

 

protected override void SetSelectedEntity() {

selectedEntity = selectedIndex < 0? null

: countriesMembershipsArray[selectedIndex];

ShowSelectedEntity();

SetNavigationControlsState();

}

 

protected override void ClearDataControls() {

textBoxId.Text = "";

comboBoxOrganization.SelectedIndex = -1;

comboBoxCountry.SelectedIndex = -1;

comboBoxMembershipStatus.SelectedIndex = -1;

checkBoxIsFounder.CheckState = CheckState.Indeterminate;

textBoxAccessionDate.Text = "";

textBoxSecessionDate.Text = "";

textBoxDescription.Text = "";

textBoxURL.Text = "";

}

 

public override void RefreshSelectionLists() {

comboBoxOrganization.Items.Clear();

comboBoxOrganization.Items.AddRange(dataRepository

.OrganizationsArray

.Select(e => e.Name).ToArray());

comboBoxCountry.Items.Clear();

comboBoxCountry.Items.AddRange(dataRepository

.CountriesArray

.Select(e => e.Name).ToArray());

comboBoxMembershipStatus.Items.Clear();

comboBoxMembershipStatus.Items.AddRange(dataRepository

.MembershipStatusesArray

.Select(e => e.Name).ToArray());

}

 

protected override void ShowSelectedEntity() {

if (selectedEntity == null) {

ClearDataControls();

return;

}

textBoxId.Text = selectedEntity.Id.ToString();

comboBoxOrganization.Text = selectedEntity.

Organization.Name;

comboBoxCountry.Text = selectedEntity.Country.Name;

comboBoxMembershipStatus.Text = selectedEntity.

MembershipStatus.Name;

checkBoxIsFounder.CheckState =

selectedEntity.IsFounder.HasValue?

(bool)selectedEntity.IsFounder?

CheckState.Checked: CheckState.Unchecked

: CheckState.Indeterminate;

textBoxAccessionDate.Text =

selectedEntity.AccessionDate.ToShortDateString();

textBoxSecessionDate.Text =

selectedEntity.SecessionDate.HasValue?

((DateTime)selectedEntity.AccessionDate)

.ToShortDateString(): "";

textBoxDescription.Text = selectedEntity.Description;

textBoxURL.Text = selectedEntity.URL;

}

 

private void FMembershipsEditor_Load(

object sender, EventArgs e) {

RefreshSelectionLists();

ShowSelectedEntity();

}

 

}

}

 

Завдання 3. Створення дочірнього вікна на основі форми редагування даних.

 

Зразок програмного коду реалізації дочірнього вікна редагування даних на основі класу форми FMembershipsEditor наведений у лістингу 2.

 

Лістинг 2 – Фрагмент програмного коду класу FWorldDivisionFileEditor

 

using WorldDivisionForms.Editing;

using WorldDivisionForms.Editing.Derived;

 

namespace WorldDivisionFileEditor {

 

public partial class FWorldDivisionFileEditor: Form {

 

//private FSimpleMembershipsEditor membershipsEditor;

private FMembershipsEditor membershipsEditor;

 

private void mdiChild_FormClosing(object sender, CancelEventArgs e) {

e.Cancel = true;

IEditingForm editingForm = sender as IEditingForm;

if (editingForm == null ||!editingForm.Changing) {

(sender as Form).Hide();

}

}

 

private void editingForm_DataChanged(object sender, EventArgs e) {

this.hasDataChanges = true;

foreach (Form form in this.MdiChildren) {

IEditingForm editingForm = form as IEditingForm;

if (editingForm!= null &&

!Object.ReferenceEquals(editingForm, sender)) {

editingForm.RefreshSelectionLists();

}

}

}

 

private void menuDataMemberships_Click(object sender,

EventArgs e) {

if (membershipsEditor == null) {

membershipsEditor = new

FMembershipsEditor(dataRepository);

//FSimpleMembershipsEditor(dataRepository);

membershipsEditor.MdiParent = this;

membershipsEditor.FormClosing

+= mdiChild_FormClosing;

membershipsEditor.DataChanged

+= editingForm_DataChanged;

}

membershipsEditor.Show();

}

 

}

}

 

 

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



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