Как и любая программа дизайнер должен иметь возможность сохранения наработанного материала и его последующего восстановления, для продолжения работы. Удобнее сохранять в файл с определенным синтаксисом. Синтаксис должен быть интуитивно понятным, коротким, шифрование пока не требуется. После рассмотрения различных вариантов остановился на формате ini файлов. Немного переиначил его для удобства заполнения/считывания/разбора и назвал форматом osd.
Сохранены будут компоненты с их свойствами, обработчики событий будут только намечены, но не будет сохранена логика выполнения обработчиков событий. Формат можно использовать как шаблон размещения компонентов на форме.
Если рассматривать классы библиотеки то алгоритм выгрузки находится в классе SaveForm.cs, загрузки - в pDesignerMainForm.cs и в PropValueConverter.cs.
При выгрузке заполняется шаблон, имеющий условно два раздела. Больше не потребовалось. Разделы заключены в конструкции:
[<Конструкторы] [Конструкторы>] [<Свойства] [Свойства>]
Такой шаблон удобно заполнять добавляя строки со свойствами или выше ограничителя [Свойства>], или ниже ограничителя [<Свойства]. То же самое и с самими компонентами, дописываем между ограничителями [<Конструкторы] и [Конструкторы>].
Частично использовался уже наработанный алгоритм формирования сценария (класс SaveScript.cs), поэтому в osd можно увидеть строки, похожие на код сценария:
[<Конструкторы] Форма_0=Ф.Форма();
ПанельВкладок1=Ф.ПанельВкладок();
...
[Конструкторы>]
[<Свойства] [<Форма_0]
Форма_0.Размер = Ф.Размер(440, 415);
...
[Свойства>]
Итак, у нас есть формат файла для сохранения, нужно его заполнить по алгоритму:
Перечень текущих свойств формы и всех компонентов получаем из сетки свойств и коллекции компонентов. RequiredValues и DefaultValues - это свойства у каждого компонента с типом значения String. Свойства, перечисленные в RequiredValues выгружаются независимо от того были или нет изменены в процессе работы. DefaultValues - содержит перечень свойств, которые были у компонента на момент создания или после загрузки из osd. DefaultValues заполняется динамически, изначально оно пустое.
Итак, формат osd лучше подойдет для сохранения дизайна формы, взаимного расположения элементов управления и для наметки обработчиков событий. Он не сохраняет логику сценария. Обойти эти ограничения можно сохранив сценарий в формате os.
.