четверг, 25 декабря 2008 г.

Сохранение значений формы в переменных документа

В прошлой заметке я привел несколько макросов, разработанных самостоятельно, которые позволяют сохранять содержимое полей ввода при закрытии формы и восстанавливать их при открытии формы. Пояснять код нет необходимости — он достаточно хорошо раскомментирован. В пояснении, на мой взгляд, нуждаются предпосылки для реализации именно такого алгоритма.
Сохранение значений
Для хранения значений я использовал такое понятие как ActiveDocument.Variables или переменные документа.
Этим я преследовал единственную цель: все данные, которые необходимы для работы программы хранить в одном файле, что очень удобно с точки зрения конечного пользователя.
Работа с переменными документа довольно понятно расписана в справке по Visual Basic for Application. Я хотел бы сказать о другом. О принципе хранения значений.
Каждая переменная в документе получает свое имя (Name), причем не случайное, а содержащее имя компонента, значение которого она содержит. Если компонент содержит несколько значений, например, это список, то кроме имени компонента в имя переменной нужно записать и номер каждой записи списка. Т.е. каждая запись в списке хранится в своей переменной.
Я в приведенном примере пользовался такими именами
1 2 FatherName_ComboBox00 'хранение списка отчеств. Эта переменная хранит первый элемент списка FatherName_ComboBoxSelectedItem 'здесь хранится номер выбранной строки списка отчеств

Если нужно хранить логическое значение True или False, как например для CheckBox, то для этого просто записываем значение как текст.
Нюанс при работе с переменными.
При сохранении каждой переменной присваивается индекс, но не в порядке создания, а по правилам сортировки. У меня возникла ситуация, когда при количестве элементов списка более 10, после переменной с именем FatherName_ComboBox1 (индекс 0) сразу шла переменная FatherName_ComboBox10 (индекс 1), а не FatherName_ComboBox2 как хотелось бы. При чтении переменных это вызывало ошибку, т.к. происходила попытка записи в 10 строку списка, а строки такой еще не было.
Выход из этой ситуации был найден такой. Номер строки списка задавался не одной, двумя цифрами 00, 01 … и т.д. Это позволит без проблем сохранять список из 100 значений. Если нужно больше, то нужно соответственно увеличить количество цифр в номере.

Комментариев нет:

Отправить комментарий