Сохранение формы в файл osd

Как и любая программа дизайнер должен иметь возможность сохранения наработанного материала и его последующего восстановления, для продолжения работы. Удобнее сохранять в файл с определенным синтаксисом. Синтаксис должен быть интуитивно понятным, коротким, шифрование пока не требуется. После рассмотрения различных вариантов остановился на формате ini файлов. Немного переиначил его для удобства заполнения/считывания/разбора и назвал форматом osd.

Сохранены будут компоненты с их свойствами, обработчики событий будут только намечены, но не будет сохранена логика выполнения обработчиков событий. Формат можно использовать как шаблон размещения компонентов на форме.

Если рассматривать классы библиотеки то алгоритм выгрузки находится в классе SaveForm.cs, загрузки - в pDesignerMainForm.cs и в PropValueConverter.cs.

При выгрузке заполняется шаблон, имеющий условно два раздела. Больше не потребовалось. Разделы заключены в конструкции:

[<Конструкторы] [Конструкторы>]
[<Свойства] [Свойства>]

Такой шаблон удобно заполнять добавляя строки со свойствами или выше ограничителя [Свойства>], или ниже ограничителя [<Свойства]. То же самое и с самими компонентами, дописываем между ограничителями [<Конструкторы] и [Конструкторы>].

Частично использовался уже наработанный алгоритм формирования сценария (класс SaveScript.cs), поэтому в osd можно увидеть строки, похожие на код сценария:

[<Конструкторы] Форма_0=Ф.Форма();
                ПанельВкладок1=Ф.ПанельВкладок();
                ...
                [Конструкторы>]
[<Свойства] [<Форма_0]
Форма_0.Размер = Ф.Размер(440, 415);
...
[Свойства>]

Итак, у нас есть формат файла для сохранения, нужно его заполнить по алгоритму:

  • 1. Получить перечень текущих свойств формы и всех компонентов.
  • 2. Выгрузить обязательные свойства согласно свойству RequiredValues в классе компонента.
  • 3. Сравнить текущие свойства с DefaultValues в классе компонента и измененные выгрузить.
  • Перечень текущих свойств формы и всех компонентов получаем из сетки свойств и коллекции компонентов. RequiredValues и DefaultValues - это свойства у каждого компонента с типом значения String. Свойства, перечисленные в RequiredValues выгружаются независимо от того были или нет изменены в процессе работы. DefaultValues - содержит перечень свойств, которые были у компонента на момент создания или после загрузки из osd. DefaultValues заполняется динамически, изначально оно пустое.

    Итак, формат osd лучше подойдет для сохранения дизайна формы, взаимного расположения элементов управления и для наметки обработчиков событий. Он не сохраняет логику сценария. Обойти эти ограничения можно сохранив сценарий в формате os.

    .