Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебное пособие по циклу лабораторных работ Технологии разработки программного обеспечения .doc
Скачиваний:
204
Добавлен:
06.03.2016
Размер:
3.8 Mб
Скачать
    1. Программное удаление объекта

  1. Настроим удаление объекта Кафедра. Для доступа к пространству ECOподключим к форме файл packModelUnit (в разделеinterfaceмодуля формы). В обработчике события выбора пункта меню Действие > Кафедра > Удалить запишем следующий код:

procedure TLecturer.MenuItem9_Click(sender: System.Object; e: System.EventArgs);

var

CurChair: clChair;

DelChair: string;

result: System.Windows.Forms.DialogResult;

begin

if ehChair.GetList.Count <> 0 then

begin

if cmhChair.Element.AsObject is clChair

then

begin

CurChair := clChair(cmhChair.Element.AsObject);

DelChair := 'Вы хотите удалить кафедру ' + CurChair.ChairName + ' ?';

result := MessageBox.Show(DelChair, 'Удаление кафедры', MessageBoxButtons.YesNo, MessageBoxIcon.Question);

if(result = System.Windows.Forms.DialogResult.Yes)

then

CurChair.AsIObject.Delete;

EcoGlobalActions.ExecuteAction(EcoAction(1),RHRoot);

end;

end;

end;

Перед ликвидацией объекта надо определить, какой объект пространства ECOподлежит уничтожению. Воспользуемся компонентомcmhChair. ПеременнаяCurChairбудет хранить локальный экземпляр класса Кафедра (выделенного в таблице Кафедры). Перед удалением объекта необходимо проверить, является ли выбранный в таблице элемент представителем классаclChair. Для этого обратимся к свойствуElementкомпонентаcmhChair, которое определяет выбранный компонент. Стандартный методAsObjectпозволит интерпретировать значение свойстваElementкак стандартный объект .NET. Сравним его тип с нужным нам типом (классомclChair).

Дескриптор ehChairорганизует доступ к объектам класса Кафедра. Воспользуемся его методамиGetListиCount, чтобы проверить наличие хотя бы одного объекта класса Кафедра.

Воспользуемся готовым компонентом MessageBoxдля подтверждения удаления. В строковую переменнуюDelChairзапишем вопросительное предложение, которое передадим в качестве параметра в методShowкомпонентаMessageBox. Параметр методаShow–MessageBoxButtons.YesNoпозволит создать окно сообщения с двумя кнопками. Возвращаемое значение от этого компонента (YesилиNo) присвоим переменнойresult(типаSystem.Windows.Forms.DialogResult). Параметр методаShow–MessageBoxIcon.Questionсоздаст в окне сообщения иконку-вопрос.

Нам нужен интерфейс IObjectсозданного локального экземпляра (хранимого в переменнойCurChair), присутствующий у всех объектовECOи предназначенный для прямой манипуляции объектным пространствомEcoSpace. Он позволяет, в частности, удалить нужный экземпляр класса из пространстваEcoSpace. Удаление выполняется вызовом методаDeleteинтерфейсаIObject. Затем обновляем базу данных.

  1. Запустим приложение и проверим функцию удаления (см. Рисунок 10 .76).

Рисунок 10.76 – Программное удаление объекта

Удаление объектов Преподаватель и Дисциплина аналогично.

    1. Программное редактирование объекта

  1. Перейдем к настройке операции редактирования объекта. Так же, как и в случае добавления, для редактирования воспользуемся отдельным окном. Создадим новую форму ECOEnabledWindowsForm. В этой форме будем редактировать выбранную в таблице кафедру. Назовем формуwfChairEdit(классTChairEdit), в свойствеTextвведем значение Редактирование кафедры.

  1. Настроим вызов созданной формы по выбору пункта меню Действие > Кафедра > Редактировать. Перейдем к вкладке CodeформыwfChairEdit. Объявим переменную, ответственную за создание данной формы:

var

callChairEdit: TChairEdit;

  1. Перейдем к форме Преподаватели. Подключим форму wfChairEdit. Для редактирования объекта надо определить, какой объект подлежит редактированию. Для этого в форме Преподаватели создадим переменную типаclChair:

var

callLect: TLecturer;

CurChair: clChair;

В этой переменной будем хранить текущий объект.

  1. Для взятия текущего объекта воспользуемся компонентом cmhChair. В обработчике события выбора пункта меню Действие > Кафедра > Редактировать пропишем следующие операции:

procedure TLecturer.MenuItem8_Click(sender: System.Object; e: System.EventArgs);

begin

if ehChair.GetList.Count <> 0

then

begin

if cmhChair.Element.AsObject is clChair

then

CurChair := clChair(cmhChair.Element.AsObject);

callChairEdit := TChairEdit.Create(EcoSpace);

callChairEdit.MdiParent := ParentWin;

callChairEdit.Show;

end;

end;

Окно редактирования будет создано в том случае, если есть хотя бы один объект класса Кафедра. Воспользуемся переменной CurChairв форме Редактирование кафедры, чтобы иметь доступ к значениям полей текущего объекта.

  1. Вернемся к форме Редактирование кафедры. Разместим на ней три компонента Label, три компонента TextBox(категорияWindowsForms) и две кнопки (см. Рисунок 10 .77).

  2. В свойстве FormBorderStyleустановим значение FixedDialog, в свойствеControlBox–False.

Рисунок 10.77 – Настройка компонентов формы Редактирование кафедры

  1. Подключим файл packModelUnit, выберем в свойстве EcoSpaceTypeкомпонентаRHRootзначениеprojDeanOfficeEcoSpaceдля доступа к пространству ECO. Подключим формуwfLecturer(Преподаватель), чтобы использовать созданную в ней переменную CurChair.

  2. При вызове окна Редактирование кафедры поля компонентов TextBox должны содержать значения соответствующих полей объекта, выбранного для редактирования.

Выделим форму в окне проектировщика и перейдем на вкладку Events(События) в инспекторе объектов. Выберем событиеLoadи сформируем обработчик, в котором запишем следующий код:

procedure TChairEdit.TChairEdit_Load(sender: System.Object; e: System.EventArgs);

begin

TextBox1.Text := CurChair.ChairName;

TextBox2.Text := CurChair.ChairHeadSNP;

TextBox3.Text := CurChair.ChairSecrSNP;

end;

  1. После того, как пользователь отредактировал данные, сохраним изменения. Сохранение происходит и в случае, когда данные не были изменены. В обработчике нажатия кнопки ОК запишем код:

procedure TChairEdit.Button1_Click(sender: System.Object; e: System.EventArgs);

CurChair.ChairName := TextBox1.Text;

CurChair.ChairHeadSNP := TextBox2.Text;

CurChair.ChairSecrSNP := TextBox3.Text;

Close;

end;

Эта процедура аналогична операции добавления, за исключением того, что мы не создаем новый объект, а оперируем с существующим объектом.

  1. Запустим приложение, проверим функцию редактирования кафедры (см. Рисунок 10 .78)

Рисунок 10.78 – Редактирование объекта в отдельном окне

По аналогии настроим редактирование преподавателя и дисциплины. Обратим внимание, что при оперировании с целочисленными значениями необходимо перевести их в значение типа stringпри выводе, используя функциюToString:

TextBox3.Text := CurLect.MaxAmountHours.ToString;

Обратное преобразование производится применением функции Convert.ToInt32:

CurLect.MaxAmountHours := Convert.ToInt32(TextBox3.Text);