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

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. Затем обновляем базу данных.

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

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

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