Полезное:
Как сделать разговор полезным и приятным
Как сделать объемную звезду своими руками
Как сделать то, что делать не хочется?
Как сделать погремушку
Как сделать так чтобы женщины сами знакомились с вами
Как сделать идею коммерческой
Как сделать хорошую растяжку ног?
Как сделать наш разум здоровым?
Как сделать, чтобы люди обманывали меньше
Вопрос 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: 335; Нарушение авторских прав |