В прошлой заметке я привел несколько макросов, разработанных самостоятельно, которые позволяют сохранять содержимое полей ввода при закрытии формы и восстанавливать их при открытии формы. Пояснять код нет необходимости — он достаточно хорошо раскомментирован. В пояснении, на мой взгляд, нуждаются предпосылки для реализации именно такого алгоритма.
Сохранение значений
Для хранения значений я использовал такое понятие как ActiveDocument.Variables или переменные документа.
Этим я преследовал единственную цель: все данные, которые необходимы для работы программы хранить в одном файле, что очень удобно с точки зрения конечного пользователя.
Работа с переменными документа довольно понятно расписана в справке по Visual Basic for Application. Я хотел бы сказать о другом. О принципе хранения значений.
Каждая переменная в документе получает свое имя (Name), причем не случайное, а содержащее имя компонента, значение которого она содержит. Если компонент содержит несколько значений, например, это список, то кроме имени компонента в имя переменной нужно записать и номер каждой записи списка. Т.е. каждая запись в списке хранится в своей переменной.
Я в приведенном примере пользовался такими именами
Если нужно хранить логическое значение True или False, как например для CheckBox, то для этого просто записываем значение как текст.
Нюанс при работе с переменными.
При сохранении каждой переменной присваивается индекс, но не в порядке создания, а по правилам сортировки. У меня возникла ситуация, когда при количестве элементов списка более 10, после переменной с именем FatherName_ComboBox1 (индекс 0) сразу шла переменная FatherName_ComboBox10 (индекс 1), а не FatherName_ComboBox2 как хотелось бы. При чтении переменных это вызывало ошибку, т.к. происходила попытка записи в 10 строку списка, а строки такой еще не было.
Выход из этой ситуации был найден такой. Номер строки списка задавался не одной, двумя цифрами 00, 01 … и т.д. Это позволит без проблем сохранять список из 100 значений. Если нужно больше, то нужно соответственно увеличить количество цифр в номере.
Сохранение значений
Для хранения значений я использовал такое понятие как 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 значений. Если нужно больше, то нужно соответственно увеличить количество цифр в номере.
Комментариев нет:
Отправить комментарий